Подтвердить что ты не робот

Автоматизировать передачу файла scp с помощью оболочки script

У меня есть несколько n файлов в каталоге в моей системе unix. Есть ли способ написать shellscript, который будет передавать все эти файлы с помощью scp в указанную удаленную систему. Я укажу пароль в script, так что мне не нужно вводить его для каждого файла.

4b9b3361

Ответ 1

Вместо пароля жесткого кодирования в оболочке script используйте SSH-ключи, это проще и безопаснее.

$ scp -i ~/.ssh/id_rsa [email protected]:/path/to/bin/*.derp .

если ваш закрытый ключ находится в ~/.ssh/id_rsa

Чтобы создать пару открытого/закрытого ключей:

$ ssh-keygen -t rsa

Вышеописанное будет генерировать 2 файла, ~/.ssh/id_rsa (закрытый ключ) и ~/.ssh/id_rsa.pub (открытый ключ)

Чтобы настроить SSH-ключи для использования (одноразовая задача): Скопируйте содержимое ~/.ssh/id_rsa.pub и вставьте в новую строку ~devops/.ssh/authorized_keys в myserver.org сервере. Если ~devops/.ssh/authorized_keys не существует, не стесняйтесь его создавать.

Ясное руководство по эксплуатации доступно здесь.

Ответ 3

вы также можете использовать rsync. Кажется, что он работает лучше для нескольких файлов, чем scp IMHO.

rsync -avzh /path/to/dir/ [email protected]:/path/to/remote/dir/

Обновление

Вы можете использовать rsync через ssh, добавив переключатель '-e':

rsync -avzh -e ssh /path/do/dir/ [email protected]:/path/to/remote/dir/

Ответ 4

#!/usr/bin/expect -f
spawn scp -r BASE.zip [email protected]:/tmp
expect "password:"
send "wifinetworks\r"
expect "*\r"
expect "\r"

Ответ 5

почему бы вам не попробовать?

password="your password"
username="username"
Ip="<IP>"
sshpass -p "$password" scp /<PATH>/final.txt [email protected]$Ip:/root/<PATH>

Ответ 6

Что можно сказать о подстановочных знаках или нескольких файлах?

scp file1 file2 more-files* [email protected]:/some/dir/

Ответ 7

rsync - это программа, которая ведет себя так же, как и rcp, но имеет много других опций и использует протокол удаленного обновления rsync, чтобы значительно ускорить передачу файлов, когда файл назначения обновлено.

Протокол удаленного обновления rsync позволяет rsync передавать только различия между двумя наборами файлов через сетевое соединение, используя эффективный алгоритм поиска контрольной суммы, описанный в техническом отчет, который прилагается к этому пакету.


Копирование папки из одного места в другое

   #!/usr/bin/expect -f   
   spawn rsync -a -e ssh [email protected]:/cool/cool1/* /tmp/cool/   
   expect "password:"   
   send "cool\r"   
   expect "*\r"   
   expect "\r"  

Ответ 8

Если вам будет удобно вводить пароль один раз для каждого запуска script, вы можете сделать это легко, используя главное соединение SSH.

#!/usr/bin/env bash

USER_AT_HOST="[email protected]"  # use "[email protected]$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"

Ответ 9

Вы можете сделать это только с помощью открытых/закрытых ключей ssh. Или используйте шпатлевку, в которой вы можете установить пароль. scp не поддерживает передачу пароля в командной строке.

Инструкции для открытых/закрытых ключей можно найти здесь: http://www.softpanorama.org/Net/Application_layer/SSH/scp.shtml

Ответ 10

Это будет работать:

#!/usr/bin/expect -f

spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no file1 file2 file3 [email protected]:/path/
expect "password:"
send "xyz123\r"
expect "*\r"
expect "\r"
interact

Ответ 11

Попробуйте lftp

lftp -u $user,$pass sftp://$host << --EOF--

cd $directory

put $srcfile

quit

--EOF--

Ответ 12

Команда scp может использоваться как традиционная UNIX cp. SO, если вы это сделаете:

scp -r myDirectory/ [email protected]:TargetDirectory

будет работать