Я хотел бы знать простой способ использовать scp для копирования файлов и папок, которые присутствуют в разных путях в моей файловой системе. Сервер назначения ssh запрашивает пароль, и я не могу поместить его в файлы конфигурации. Я знаю, что scp не имеет параметра пароля, который я мог бы предоставить из script, поэтому теперь я должен копировать каждый файл или каталог один за другим, каждый раз записывая мой пароль.
Умный способ копирования нескольких файлов с разных путей usinc scp
Ответ 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 минут, поэтому вам нужно будет только ввести пароль в первый раз.
Этот пост содержит более подробную информацию об этой функции.