У меня есть n файлов в каталоге в моей системе unix. Есть ли способ написать сценарий оболочки, который будет передавать все эти файлы через scp в указанную удаленную систему. Я укажу пароль внутри скрипта, чтобы мне не приходилось вводить его для каждого файла.
84
Ответы:
Вместо жесткого кодирования пароля в сценарии оболочки используйте ключи SSH, это проще и безопаснее.
предполагая, что ваш закрытый ключ находится в
~/.ssh/id_rsa
и файлы, которые вы хотите отправить, могут быть отфильтрованы с помощью*.derp
Чтобы создать пару открытого и закрытого ключей:
Вышеупомянутое сгенерирует 2 файла
~/.ssh/id_rsa
(закрытый ключ) и~/.ssh/id_rsa.pub
(открытый ключ).Чтобы настроить ключи SSH для использования (одноразовая задача): Скопируйте содержимое
~/.ssh/id_rsa.pub
и вставьте в новую строку~devops/.ssh/authorized_keys
наmyserver.org
сервере. Если~devops/.ssh/authorized_keys
не существует, смело создавайте его.Подробное руководство доступно здесь .
источник
#!/usr/bin/expect -f # connect via scp spawn scp "user@example.com:/home/santhosh/file.dmp" /u01/dumps/file.dmp ####################### expect { -re ".*es.*o.*" { exp_send "yes\r" exp_continue } -re ".*sword.*" { exp_send "PASSWORD\r" } } interact
http://blogs.oracle.com/SanthoshK/entry/automate_linux_scp_command
источник
expect
упакованные в MSYS2 будут совпадать со всем выводом, поэтому первое правило всегда будет совпадать. Если вы поменяете порядок обоих правил, вы получите желаемое поведение.почему бы тебе не попробовать это?
password="your password" username="username" Ip="<IP>" sshpass -p "$password" scp /<PATH>/final.txt $username@$Ip:/root/<PATH>
источник
вы также можете использовать rsync. Кажется, он работает лучше для нескольких файлов, чем scp IMHO.
Обновить
Вы можете использовать rsync через ssh, добавив переключатель '-e':
источник
#!/usr/bin/expect -f spawn scp -r BASE.zip abhishek@192.168.1.115:/tmp expect "password:" send "wifinetworks\r" expect "*\r" expect "\r"
источник
А как насчет подстановочных знаков или нескольких файлов?
источник
rsync - это программа, которая ведет себя во многом так же, как rcp, но имеет гораздо больше возможностей и использует протокол удаленного обновления rsync для значительного ускорения передачи файлов при обновлении файла назначения.
Протокол удаленного обновления rsync позволяет rsync передавать только различия между двумя наборами файлов через сетевое соединение, используя эффективный алгоритм поиска контрольной суммы, описанный в техническом отчете, прилагаемом к этому пакету.
Копирование папки из одного места в другое
#!/usr/bin/expect -f spawn rsync -a -e ssh username@192.168.1.123:/cool/cool1/* /tmp/cool/ expect "password:" send "cool\r" expect "*\r" expect "\r"
источник
Если вы согласны вводить пароль один раз при каждом запуске скрипта, вы можете легко сделать это, используя главное соединение SSH.
#!/usr/bin/env bash USER_AT_HOST="user@host" # use "$1@$2" here if you like SSHSOCKET=~/".ssh/$USER_AT_HOST" # This is the only time you have to enter the password: # Open master connection: ssh -M -f -N -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" # These do not prompt for your password: scp -o ControlPath="$SSHSOCKET" file1.xy "$USER_AT_HOST":remotefile1.xy scp -o ControlPath="$SSHSOCKET" file2.xy "$USER_AT_HOST":remotefile2.xy # You can also use the flag for normal ssh: ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo hello" ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo world" # Close master connection: ssh -S "$SSHSOCKET" -O exit "$USER_AT_HOST"
источник
Вы можете сделать это только с публичными / приватными ключами ssh. Или воспользуйтесь шпатлевкой, в которой можно установить пароль. scp не поддерживает ввод пароля в командной строке.
Вы можете найти инструкции для открытых / закрытых ключей здесь: http://www.softpanorama.org/Net/Application_layer/SSH/scp.shtml
источник
Это будет работать:
#!/usr/bin/expect -f spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no file1 file2 file3 user@host:/path/ expect "password:" send "xyz123\r" expect "*\r" expect "\r" interact
источник
вот bash-код для SCP с ключевым файлом .pem. Просто сохраните его в файл script.sh, затем запустите с sh script.sh
наслаждаться
#!/bin/bash #Error function function die(){ echo "$1" exit 1 } Host=ec2-53-298-45-63.us-west-1.compute.amazonaws.com User=ubuntu #Directory at sent destination SendDirectory=scp #File to send at host FileName=filetosend.txt #Key file Key=MyKeyFile.pem echo "Aperture in Process..."; #The code that will send your file scp scp -i $Key $FileName $User@$Host:$SendDirectory || \ die "@@@@@@@Houston we have problem" echo "########Aperture Complete#########";
источник
Попробуйте lftp
lftp -u $user,$pass sftp://$host << --EOF-- cd $directory put $srcfile quit --EOF--
источник
Команду
scp
можно использовать как в традиционной UNIXcp
. ТАК, если вы это сделаете:заработает
источник