Умный способ скопировать несколько файлов с разных путей usinc scp - PullRequest
9 голосов
/ 09 января 2012

Я хотел бы знать простой способ использования scp для копирования файлов и папок, которые находятся по разным путям в моей файловой системе.Целевой сервер ssh запрашивает пароль, и я не могу поместить его в файлы конфигурации.Я знаю, что у scp нет параметра пароля, который я мог бы предоставить из скрипта, поэтому сейчас я должен копировать каждый файл или каталог один за другим, каждый раз записывая свой пароль.

Ответы [ 5 ]

11 голосов
/ 24 октября 2012

в дополнение к уже упомянутому глобусу:

вы можете использовать {,} для определения альтернативных путей / частей пути в одном операторе

например: scp user@host:/{PATH1,PATH2} DESTINATION

4 голосов
/ 09 января 2012

создайте пару ключей, скопируйте открытый ключ на стороне сервера.

ssh-keygen -t rsa

Добавьте содержимое в файле ~ / .ssh / identity.pub в файл ~ / .ssh / authorized_keys2 на стороне серверапользователь.Вам больше не нужно вводить пароль.

Однако будьте осторожны!любой, кто может получить доступ к вашей «локальной учетной записи», может также «ssh» подключиться к серверу без пароля.

4 голосов
/ 09 января 2012

Если вы можете выразить все имена файлов, которые вы хотите скопировать из удаленной системы, с помощью одного шаблона glob, то вы можете сделать это с помощью одной команды scp.Это использование будет поддерживать только одну папку назначения в локальной системе для всех файлов.Например:

scp 'RemoteHost:/tmp/[abc]*/*.tar.gz' .

копирует все файлы из удаленной системы с именами (something).tar.gz и расположенные в подкаталогах /tmp, имена которых начинаются с a, b илиc.Одинарные кавычки предназначены для защиты шаблона глоба от интерпретации из оболочки в локальной системе.

Если вы не можете выразить все файлы, которые хотите скопировать, как один шаблон глобуса, и вы все еще хотите, чтобы копия былаВы можете использовать одну команду (и одно SSH-соединение, которое будет запрашивать ваш пароль только один раз), тогда вы можете либо:

  • Использовать команду, отличную от scp, например sftp или rsync или
  • Откройте главное соединение SSH с удаленным хостом и выполните несколько команд scp в качестве подчиненных этого мастера.Подчиненные устройства будут подключаться к основному соединению, которое остается открытым и не будет запрашивать пароль.Ознакомьтесь с основными и подчиненными соединениями на странице ssh.
3 голосов
/ 10 августа 2018

С этого сайта :

Открыть мастер

SSHSOCKET=~/.ssh/myUsername@targetServerName ssh -M -f -N -o ControlPath=$SSHSOCKET myUsername@targetServerName

Открывайте и закрывайте другие соединения без повторной аутентификации, как вам нравится

scp -o ControlPath=$SSHSOCKET myUsername@targetServerName:remoteFile.txt ./

Закрыть мастер-соединение

ssh -S $SSHSOCKET -O exit myUsername@targetServerName

Это интуитивно понятно, безопаснее, чем создание пары ключей, быстрее, чем создание сжатого файла, и работает для меня!

2 голосов
/ 20 мая 2014

В качестве альтернативы, если вы не можете использовать аутентификацию с открытым ключом, вы можете добавить следующую конфигурацию к SSH (либо к ~/.ssh/config, либо в качестве соответствующих аргументов командной строки):

ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 2m

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

В этом сообщении есть больше подробностей об этой функции.

...