sshpass
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
sshpass — утилита для неинтерактивной передачи пароля SSH. Позволяет автоматизировать подключение к серверам, где используется аутентификация по паролю, а не по ключу.
Принцип работы
SSH читает пароль напрямую с терминала (/dev/tty), а не из stdin. sshpass создаёт выделенный псевдо-TTY и «подсовывает» пароль, заставляя SSH думать, что его вводит живой пользователь.
Установка
| ОС | Команда |
|---|---|
| macOS (Homebrew) | brew install hudochenkov/sshpass/sshpass
|
| Ubuntu / Debian | apt install sshpass
|
| CentOS / RHEL | yum install sshpass
|
| Alpine | apk add sshpass
|
Способы передачи пароля
| Флаг | Источник | Пример |
|---|---|---|
-p |
Пароль в команде | sshpass -p 'mypass' ssh user@host
|
-f |
Первая строка файла | sshpass -f /tmp/secret ssh user@host
|
-d |
Файловый дескриптор | sshpass -d 3 ssh user@host 3< /tmp/secret
|
-e |
Переменная окружения SSHPASS |
export SSHPASS='mypass' && sshpass -e ssh user@host
|
| (без флага) | Стандартный ввод | sshpass ssh user@host < /tmp/secret
|
Дополнительные опции
| Опция | Описание |
|---|---|
-P prompt |
Указать строку-приглашение для пароля (по умолчанию ищет assword:)
|
-v |
Подробный вывод в stderr (для отладки) |
Примеры
Базовая команда
sshpass -p 'password' ssh -o StrictHostKeyChecking=no root@192.168.1.1 "uptime"
Через переменную окружения (безопаснее)
export SSHPASS='password' sshpass -e ssh -o StrictHostKeyChecking=no root@192.168.1.1
Из файла
echo 'password' > ~/.ssh/.pass && chmod 600 ~/.ssh/.pass sshpass -f ~/.ssh/.pass ssh root@192.168.1.1
Копирование файла (scp)
sshpass -e scp -o StrictHostKeyChecking=no file.txt root@192.168.1.1:/tmp/
Интеграция с opencode
С sshpass можно подключаться к удалённым серверам через opencode-ops:
- Установить sshpass
- Создать запись в
~/.ssh/config:
Host my-server
HostName 185.73.124.210
User root
Port 22
StrictHostKeyChecking no
- Использовать sshpass через
SSH_ASKPASSили обёртку
Безопасность
| Метод | Уровень риска | Комментарий |
|---|---|---|
-p |
Высокий | Пароль виден в ps aux и истории shell
|
-e |
Средний | Пароль в переменной окружения — виден дочерним процессам |
-f |
Низкий | Пароль в файле — достаточно выставить chmod 600
|
| SSH-ключи | Нулевой | Рекомендуемый способ для production |
Минусы sshpass
- Пароль может быть перехвачен через
/proc
|* Не работает с passphrase для ключей (нужен ssh-agent)
- Не все SSH-серверы поддерживают keyboard-interactive режим
- Для production всегда предпочтительнее ключи ed25519
