💾 Archived View for byzoni.org › gemlog › 2021-12-15-sshpass.gmi captured on 2023-01-29 at 03:08:17. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-17)
-=-=-=-=-=-=-
2021-12-15
В SSH нет простого способа передачи паролей через стандартный ввод, что затрудняет автоматизацию.
Хотя это не идеально с точки зрения безопасности, вы можете автоматизировать аутентификацию пароля SSH в сценариях bash с помощью утилиты sshpass.
Прежде чем мы начнем – использование автоматических паролей для SSH не зря считается плохой практикой.
Почти во всех случаях лучше использовать SSH-ключ, что мы покажем ниже.
Однако у паролей есть преимущество: их легче использовать, запоминать и распространять среди членов команды.
Все это одновременно является недостатком для безопасности, но это тот компромисс, который вы можете выбрать.
Обычная команда ssh не имеет флага `–password`, чтобы вы могли легко автоматизировать эту процедуру.
Вам придется установить инструмент под названием sshpass для явной обработки этого действия.
Вы можете загрузить его из большинства менеджеров пакетов Linux; для систем на базе Debian, таких как Ubuntu, это:
sudo apt-get install sshpass
Если вы используете sshpass внутри скрипта, вы можете передать его непосредственно с флагом `-p`, за которым следует ваша стандартная команда SSH:
sshpass -p 'password' ssh user@remote
Однако это не очень хорошая практика по нескольким причинам:
В связи с этим пароль следует хранить в файле.
Обязательно установите права на него, чтобы он не был доступен другим пользователям.
echo "password" > password_file chmod 600 password_file
Затем передайте это в sshpass с параметром `-f`:
sshpass -f password_file ssh user@remote
Ключи SSH предпочтительнее для большинства систем.
Они гораздо длиннее, а также их труднее случайно утечь, что делает их идеальными для обеспечения безопасности.
Они также способствуют аутентификации на основе идентификации, поскольку SSH-ключи обычно привязаны к машине, на которой они созданы.
SSH хранит ваш открытый ключ в `~/.ssh/id_rsa.pub`, который он использует для всех запросов.
Создать новый файл ключа очень просто:
ssh-keygen -t rsa
Вам нужно добавить его в файл `~/.ssh/authorized_keys` на сервере, к которому вы хотите подключиться.
Существует встроенная команда ssh, которая может легко сделать это за вас:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
После этого пароль больше не будет запрашиваться.
Вы можете скопировать этот ключ на другие машины, но обычно достаточно просто добавить несколько ключей.
Синтаксис этой команды приведен ниже. Он поддерживает различные варианты.
sshpass [-f filename|-d number|-p password|-e] [options] command arguments