Как заставить 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:

Старый пост возрождается...

Я нашел это, когда искал решение той же самой проблемы, я нашел что-то, и я надеюсь, что кто-нибудь когда-нибудь найдет это полезным:

  1. Установите программу ssh-askpass (apt-get, yum ...)
  2. Установить SSH_ASKPASS переменная (export SSH_ASKPASS=/usr/bin/ssh-askpass)
  3. Из терминала откройте новое 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 на сервере.

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

Другие вопросы по тегам