Как заставить 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 на сервере.

http://www.linuxproblem.org/art_9.html

Ответ 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: