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

Возможный дубликат:
Подключитесь через SSH и введите пароль автоматически, без использования открытого ключа

У меня есть сценарий bash, который делает дамп БД, а затем копирует файл с одного сервера на другой, но всегда запрашивает пароль перед подключением.

scp file.tar.gz root@xxx.xxx.xxx.194:/backup

Есть ли способ передать пароль прямо в скрипт?

52
задан 13 April 2017 в 15:14
6 ответов

Вместо использования root создайте учетную запись только для этого задания. Используйте открытые ключи без парольной фразы вместо паролей.

scp -i /home/backupuser/.ssh/id_rsa backupuser@xxx.xxx.xxx.194:/backup

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

41
ответ дан 28 November 2019 в 19:42

scp использует SSH для туннелирования на удаленный сервер и передачи файлов. SSH может аутентифицировать пользователей с помощью пароля, ключа SSH или обоих (рекомендуется).

Чтобы передавать файлы без пароля, создайте SSH ] ключ для пользователя, которого вы собираетесь использовать (root - это , но не , используйте вместо этого непривилегированного пользователя и получите задание на целевом сервере как root для выполнения привилегированного действия).

Затем вам необходимо настроить демон целевой системы SSH для приема ключевых соединений SSH (также в ссылке выше).

Имейте в виду, что скомпрометирован SSH ключи без пароля - то же самое, что скомпрометированные пароли - любой может войти. Для реальных пользователей это ' Лучше удвоить безопасность и потребовать ключ и пароль.

1
ответ дан 28 November 2019 в 19:42

Лучше настроить 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 пользователя на сервере 2.

Теперь вы должны иметь возможность запускать ssh с первого компьютера и входить в систему без пароля.

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

3
ответ дан 28 November 2019 в 19:42

Вы не должны использовать ssh-ключи без пароля по соображениям безопасности.

Инструмент связка ключей может помочь вам повторно использовать ssh -agent и запустите rsync поверх ssh в сценариях без запроса паролей.

Чтобы установить его на машине Ubuntu, просто выполните следующую команду.

sudo apt-get install keychain

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

2
ответ дан 28 November 2019 в 19:42

pscp позволяет передавать пароль напрямую с помощью аргумента -pw. В качестве альтернативы, и это лучшая идея, используйте ssh-агент и настройте вход на основе ключа - это более безопасно. Здесь есть инструкция по настройке ssh для использования входа в систему на основе ключа

. Вы можете использовать команду yes , чтобы отправить программе «да».

3
ответ дан 28 November 2019 в 19:42

Используйте инструмент sshpass

sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/backup 
64
ответ дан 28 November 2019 в 19:42

Теги

Похожие вопросы