Как вы можете заставить SSH прочитать пароль из stdin, который он не делает по умолчанию?
Как заставить ssh получить пароль от stdin
Ответ 1
Вы не можете использовать большинство SSH-клиентов. Вы можете обойти это с помощью SSH API, например Paramiko для Python. Будьте осторожны, чтобы не отменять все политики безопасности.
Ответ 2
на основе этого сообщения вы можете:
Создайте команду, открывающую сеанс ssh с помощью SSH_ASKPASS (ищите SSH_ASKPASS на man ssh)
$ cat > ssh_session <<EOF
export SSH_ASKPASS="/path/to/script_returning_pass"
setsid ssh "your_user"@"your_host"
EOF
ПРИМЕЧАНИЕ.. Чтобы избежать ssh, чтобы попытаться спросить tty, мы используем setsid
Создайте script, который возвращает ваш пароль (обратите внимание эхо "эхо)
$ echo "echo your_ssh_password" > /path/to/script_returning_pass
Сделайте их исполняемыми
$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass
попробуйте
$ ./ssh_session
Имейте в виду, что ssh означает безопасную оболочку, и если вы храните своего пользователя, хоста и пароль в текстовых файлах, вы вводите в заблуждение инструмент, создавая возможный разрыв в безопасности
Ответ 3
Вы можете использовать sshpass, например, в официальных репозиториях debian. Пример:
$ apt-get install sshpass
$ sshpass -p 'password' ssh [email protected]
Ответ 4
Старое сообщение возрождается...
Я нашел это, когда искал решение одной и той же проблемы, нашел что-то, и я надеюсь, что когда-нибудь он найдет это полезным:
- Установите ssh-askpass программу (apt-get, yum...)
- Задайте переменную
SSH_ASKPASS
(export SSH_ASKPASS=/usr/bin/ssh-askpass
) - От терминала откройте новое ssh-соединение без переменной undefined TERMINAL (
setsid ssh [email protected]
)
Это выглядит достаточно просто, чтобы быть безопасным, но еще не проверял (просто используя локальный защищенный контекст).
Здесь мы находимся.
Ответ 5
Я не уверен, зачем вам нужна эта функциональность, но похоже, что вы можете получить это поведение с помощью ssh-keygen.
Он позволяет вам входить на сервер без использования пароля с помощью частного ключа RSA на вашем компьютере и открытого ключа RSA на сервере.
Ответ 6
Список рассылки FreeBSD рекомендует expect библиотека.
Если вам нужен программный ssh-логин, вы действительно должны использовать логики с открытым ключом, однако, очевидно, их намного меньше таким образом, по сравнению с использованием внешней библиотеки для передачи пароля через stdin
.
Ответ 7
Дистилляция этот ответ оставляет простой и общий script:
#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "[email protected]"
Сохраните его как pass
, выполните chmod +x pass
, а затем используйте его следующим образом:
$ echo mypass | pass ssh [email protected] ...
Если его первый аргумент содержит password:
, то он передает свой вход на свой вывод (cat
), иначе он запускает то, что было представлено после установки в качестве программы SSH_ASKPASS
.
Когда ssh
встречается как с установкой SSH_ASKPASS
AND DISPLAY
, он запускает программу, на которую ссылается SSH_ASKPASS
, передавая ей приглашение [email protected] password: