Умный способ копирования нескольких файлов с разных путей usinc scp

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

Ответ 1

в дополнение к уже упомянутому шару:

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

например: scp [email protected]:/{PATH1,PATH2} DESTINATION

Ответ 2

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

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

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

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

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

Ответ 3

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

ssh-keygen -t rsa

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

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

Ответ 4

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

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

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

Этот пост содержит более подробную информацию об этой функции.