Возможный дубликат:
Подключитесь через SSH и введите пароль автоматически, без использования открытого ключа
У меня есть сценарий bash, который делает дамп БД, а затем копирует файл с одного сервера на другой, но всегда запрашивает пароль перед подключением.
scp file.tar.gz root@xxx.xxx.xxx.194:/backup
Есть ли способ передать пароль прямо в скрипт?
Используйте инструмент sshpass
sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/backup
Вместо того, чтобы использовать root, создайте учетную запись только для этой работы. Используйте открытые ключи без паролей вместо паролей.
scp -i /home/backupuser/.ssh/id_rsa backupuser@xxx.xxx.xxx.194:/backup
Используя специальную учетную запись для резервного копирования в целевой системе, вы не раскрываете свой пароль root.
Лучше настроить ssh для использования аутентификации на основе ключей, чем пытаться выяснить, как отправить текст в процесс входа в систему с чем-то вроде expect
.
Взгляни на:
https://help.ubuntu.com/community/SSH/OpenSSH/Keys
Итак, в основном, беги ssh-keygen -t dsa
на машине, которая будет запускать ваш скрипт. Когда он попросит вас ввести кодовую фразу, нажмите ENTER, чтобы принять пробел. Вы получите два файла. Если вы следовали предложениям по умолчанию, файлы будут ~ / .ssh / id_dsa и ~ / .ssh / id_dsa.pub. Первый - это закрытый ключ. Второй - открытый ключ.
Скопируйте открытый ключ на второй сервер, используя ssh-copy-id user@server2
. Это добавит открытый ключ в файл authorized_keys пользователя на server2.
Теперь вы должны иметь возможность запускать ssh с первого компьютера и входить в систему без пароля.
Для копирования файлов подходят scp или rsync. Это зависит от того, что вы делаете. rsync будет использовать ssh по умолчанию, поэтому будет использовать только что настроенную вами аутентификацию на основе ключей.
pscp позволяет передать ему пароль напрямую с помощью аргумента -pw. В качестве альтернативы, и это лучшая идея, используйте ssh-агент и настройте вход на основе ключа - это более безопасно. Есть инструкция по настройке ssh для использования на основе ключей вход в систему Вот
Вы можете использовать да команда, чтобы отправить программе "да".
scp
использует SSH
для туннелирования к удаленному серверу и передачи файлов. SSH
может аутентифицировать пользователей паролем, SSH
ключ или оба (рекомендуется).
Чтобы передавать файлы без пароля, создать SSH
ключ для пользователя, которого вы собираетесь использовать (root не рекомендуется использовать вместо этого непривилегированного пользователя и иметь задание на целевом сервере как root для выполнения привилегированного действия).
Затем вам нужно настроить целевую систему SSH
демон принять SSH
ключевые соединения (также в ссылке выше).
Имейте в виду, что скомпрометированный SSH
ключи без пароля - это то же самое, что и взломанные пароли - любой может войти. Для реальных пользователей лучше удвоить безопасность и потребовать ключ и пароль.
Вам следует не использовать ssh-ключи без пароля по соображениям безопасности.
Инструмент keychain
может помочь вам повторно использовать ssh-agent и запускать rsync поверх ssh в сценариях без запроса паролей.
Чтобы установить его на машине с Ubuntu, просто выполните следующую команду.
sudo apt-get install keychain
Проверьте справочная страница для связки ключей для получения дополнительной информации о том, как его использовать.