Назад | Перейти на главную страницу

Как передать пароль команде scp, используемой в сценарии bash?

Возможный дубликат:
Подключитесь через 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

Проверьте справочная страница для связки ключей для получения дополнительной информации о том, как его использовать.