Как автоматизировать вход в SSH, если вы должны использовать пароль
У SSH нет простого способа отправки паролей через стандартный ввод, что затрудняет автоматизацию. Хотя это не идеально с точки зрения безопасности, вы можете автоматизировать аутентификацию по паролю SSH в сценариях bash с помощью утилиты sshpass
.
Прежде чем мы начнем — использование автоматических паролей для SSH не просто так считается плохой практикой. Практически во всех случаях лучше использовать SSH-ключ, который мы покажем ниже. Однако у паролей есть то преимущество, что ими легче управлять, запоминать и распространять среди членов команды. Все это одновременно является недостатком безопасности, но это компромисс, на который вы можете пойти.
Использование SSHPass
Обычная команда ssh
не имеет флага --password
, что позволяет легко автоматизировать это. Вам нужно будет установить инструмент под названием sshpass
, чтобы справиться с этим явным образом. Вы можете загрузить его из большинства менеджеров пакетов Linux; для систем на основе Debian, таких как Ubuntu, это будет:
sudo apt-get install sshpass
Если вы используете sshpass
внутри файла скрипта, вы можете передать его напрямую с помощью флага -p
, за которым следует стандартная команда SSH:
sshpass -p 'password' ssh user@remote
Однако это не является хорошей практикой по нескольким причинам:
- При использовании вне файла скрипта открытый текстовый пароль становится доступен истории команд Linux и другим системам. Другие пользователи Linux могут его увидеть.
- Может быть неясно, что в этом файле скрипта скрыт пароль, что может привести к его раскрытию из-за неверных прав доступа к файлу.
- Это может быть случайно отслежено в системе контроля версий и не позволяет изменить пароль, используемый на клиентах.
Из-за этого вместо этого вы должны хранить пароль в файле. Обязательно установите для него разрешения, чтобы гарантировать, что он недоступен для других пользователей.
echo "password" > password_file chmod 600 password_file
Затем передайте это в sshpass
с помощью -f
:
sshpass -f password_file ssh user@remote
Вместо этого настройте ключи SSH
Ключи SSH предпочтительны для большинства систем. Они намного длиннее, а также их сложнее случайно пролить, что делает их идеальными для обеспечения безопасности. Они также поощряют аутентификацию на основе личности, поскольку ключи SSH обычно привязаны к машине, на которой они созданы.
SSH хранит ваш открытый ключ в ~/.ssh/id_rsa.pub
, который он использует для всех запросов. Создать новый ключевой файл легко:
ssh-keygen
Вам нужно добавить это в файл ~/.ssh/authorized_keys
на сервере, к которому вы хотите подключиться. Существует встроенная команда SSH, которая может легко сделать это за вас:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Как только это будет сделано, вас больше не будут спрашивать пароль. Вы можете скопировать этот ключ на другие машины, но обычно можно просто добавить несколько ключей.
Вы по-прежнему захотите отключить вход в систему с паролем на удаленном сервере и, возможно, настроить ограничение скорости, белый список или даже двухфакторную аутентификацию. Вы можете прочитать наше руководство по защите машины, доступной по SSH, чтобы узнать больше.