Оглавление:
Статья последний раз была обновлена 02.07.2024
Обычное подключение по SSH требует ввода логина и пароля, но что если нам требуется организовать такое подключение в скрипте для командного интерпретатора Bash. Есть несколько способов.
Способ 1. Аутентификация на базе ключей SSH
Самый грамотный способ любого SSH-подключения, не важно это скрипт или просто последовательность команд в консоли, это генерация пары ключей на рабочей станции с последующей передачей открытого ключа на удаленный сервер (сервер — как вариант).
ssh-keygen -t rsa
Все это сгенерируется в каталог текущего пользователя ~/.ssh/. Теперь нужно передать на сервер открытый ключ, проще всего командой:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.0.25
Где username — это логин вашего пользователя на сервере, 192.168.0.25 — IP-адрес этой машины. В результате в ~/.ssh/autorized_keys на сервере должны появится дополнительные ключи. При первом подключении потребуется дать разрешение для неизвестного источника подключения, попросту ввести «yes», и лучше это сделать вручную через консоль. С этого момента подключиться к этому серверу можно простой командой:
ssh username@192.168.0.25 "uptime && free -m"
В кавычках могут быть любые другие команды вместо uptime && free -m (это просто как пример).
А если системный пользователь рабочей станции у вас совпадает с серверным, то подойдет и команда без использования логина:
ssh 192.168.0.25 "uptime && free -m"
Способ 2. Аутентификация с помощью команды SSHPass
Бывают ситуации, где нам в любом случае необходимо использовать авторизацию по паролю, и тут поможет утилита SSHPass, которая скорее всего будет в любом репозитории и устанавливается стандартно.
sshpass -p {ВАШ ПАРОЛЬ} ssh username@192.168.0.25 "uptime && free -m"
Способ 3. Аутентификация с помощью интерпретатора Expect
Самый замороченный способ с помощью альтернативного интерпретатора Expect, где он у вас расположен можно понять после ввода команды which expect. Если необходимо его установить, то делается это стандартно.
Прежде всего в скрипте нужно подключить новый интерпретатор:
Такой код актуален, если Bash и Expect у ваc лежат в каталоге системных приложений /bin, но это может быть и /usr/bin. Эта тема затрагивается в моей статье про обновление командного интерпретатора в macOS, можно почитать про альтернативные места установки.
Можно использовать Expect в скрипте и напрямую:
/usr/bin/expect -c 'spawn ssh username@192.168.0.25 "uptime && free -m" expect "Password:" { send "ВАШ ПАРОЛЬ" }'
- Поднимаем веб-сервер на Ubuntu - 16.09.2024
- Переадресация домена на другой домен - 08.08.2023
- Как установить и удалить GNOME? - 31.07.2023