Как заставить ssh получить пароль от stdin
Как вы можете заставить SSH читать пароль из стандартного ввода, который он не делает по умолчанию?
7 ответов
Вы не можете с большинством клиентов SSH. Вы можете обойти это, используя SSH API, например, Paramiko для Python. Будьте осторожны, чтобы не отменять все политики безопасности.
На основании этого поста вы можете сделать:
Создайте команду, которая открывает сессию 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
Создайте скрипт, который возвращает ваш пароль (note echo "echo")
$ echo "echo your_ssh_password" > /path/to/script_returning_pass
Сделайте их исполняемыми
$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass
попытайся
$ ./ssh_session
Имейте в виду, что ssh означает защищенную оболочку, и если вы храните свой пользователя, хост и пароль в текстовых файлах, вы вводите инструмент в заблуждение, создавая возможный пробел в безопасности
Вы можете использовать sshpass, например, в официальных репозиториях Debian. Пример:
$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
Дистилляция этого ответа оставляет простой и общий сценарий:
#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
Сохранить как pass
сделать chmod +x pass
и затем используйте это так:
$ echo mypass | pass ssh user@host ...
Если его первый аргумент содержит password:
затем он передает свой вход на свой выход (cat
) в противном случае он запускает то, что было представлено после установки себя в качестве SSH_ASKPASS
программа.
когда ssh
сталкивается с обоими SSH_ASKPASS
А ТАКЖЕ DISPLAY
установить, он запустит программу, указанную SSH_ASKPASS
Пройдя по подсказке user@host's password:
Старый пост возрождается...
Я нашел это, когда искал решение той же самой проблемы, я нашел что-то, и я надеюсь, что кто-нибудь когда-нибудь найдет это полезным:
- Установите программу ssh-askpass (apt-get, yum ...)
- Установить
SSH_ASKPASS
переменная (export SSH_ASKPASS=/usr/bin/ssh-askpass
) - Из терминала откройте новое ssh-соединение без неопределенной переменной TERMINAL (
setsid ssh user@host
)
Это выглядит достаточно просто, чтобы быть безопасным, но еще не проверял (только в локальном безопасном контексте).
Мы здесь.
Лучше sshpass
альтернатива:https://github.com/clarkwang/passh
У меня проблемы с sshpass
, если ssh-сервер не добавлен в мой known_hosts
sshpass
не будет показывать мне сообщения, passh
нет этой проблемы.
Список рассылки FreeBSD рекомендует ожидаемую библиотеку.
Если вам нужен программный логин ssh, вам действительно следует использовать логин с открытым ключом- очевидно, что в этом случае гораздо меньше дыр в безопасности по сравнению с использованием внешней библиотеки для передачи пароля через stdin
,
Я не уверен, почему вам нужна эта функциональность, но, похоже, вы можете получить такое поведение с помощью ssh-keygen.
Он позволяет вам входить на сервер без использования пароля, имея личный ключ RSA на вашем компьютере и открытый ключ RSA на сервере.