Как использовать автоввод пароля при SSH-авторизации в задачах автоматизации
Авторизация по SSH ключу
Здесь рассмотрен случай, если вам нужен автоввод пароля SSH-ключа в скриптах автоматизации, в том случае, если вы используете только аутентификацию по ключу:
(PasswordAuthentcation off; PubkeyAuthentication yes) в конфиге /etc/ssh/sshd_config.
Конечно, применение ключа SSH для авторизации является приоритетным вариантом - он более безопасен хотя-бы уже потому,
что исключает возможность и попытки подбора пароля злоумышленниками (bruteforce).
В простейшем варианте, можно использовать SSH-ключ не защищенный паролем. Но если речь идет об узле автоматизации, где один пароль может быть использован
для доступа к множеству хостов - то компроментация такого узла или утечка приватоного ключа приводит к тому, что все подконтрольные хосту будут доступны хакеру.
Это может быть, например, узел управления ansible.
Но, как известно, ansible CLI не может работать с запароленным SSH-ключом.
Самый очевидный вариант, в данном случае, использовать ssh-agent.
Запускаем ssh-agent:
Далее, однократно вводим пароль ключа и запуск ansible-команд или других будет работать со всеми серверами до того момента, как вы выйдете из ssh-сессии или выгрузите ключи из памяти агента:
Авторизация по паролю
Как уже говорилось ранее, безопаснее при автоматизации доступа использовать ssh-ключ, но иногда возникает необходимость использования именно парольной аутентификации.
(PasswordAuthentcation on) в конфиге /etc/ssh/sshd_config.
sshpass
Чтобы исключить интерактивность в данном сценарии, можно использовать пакет sshpass.
Для начала, необходимо его установить.
Использовать нестандартный порт:
expect
#!/usr/bin/expect -f
spawn ssh username@server "touch /home/user/ssh_example"
expect "Password:"
send "PASSWORD\r"
interact
С запросом пароля
#!/bin/sh
read -s -p "Введите пароль: " SSHPASS
export SSHPASS
sshpass -e ssh -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no "$@"
unset SSHPASS
Пример с алиасом
Можно логиниться к серверу, используя алиас.
Для начала, создадим скрипт /usr/local/bin/ssh_script.sh со следующим содержимым:
Пароль из файла
echo "echo YourPasswordHere" > /tmp/.ssh_pass
export SSH_ASKPASS="/tmp/.ssh_pass"
export DISPLAY=YOURDOINGITWRONG
setsid ssh root@owned.com -p 22
Обновлено: 01.02.2026