Поиск по сайту:

Как автоматизировать вход в 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, чтобы узнать больше.