Как заставить ssh получить пароль от stdin - PullRequest
20 голосов
/ 27 августа 2009

Как вы можете заставить SSH читать пароль из стандартного ввода, который он не делает по умолчанию?

Ответы [ 7 ]

18 голосов
/ 26 февраля 2013

на основе этой записи вы можете сделать:

Создайте команду, которая открывает сессию 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

Создать скрипт, который возвращает ваш пароль (примечание эхо "эхо )

$ echo "echo your_ssh_password" > /path/to/script_returning_pass

Сделать их исполняемыми

$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass

попробуйте

$ ./ssh_session

Имейте в виду, что ssh означает защищенную оболочку, и если вы храните пользователя, хост и пароль в виде простых текстовых файлов, вы вводите инструмент в заблуждение, создавая возможный пробел в безопасности

13 голосов
/ 10 июля 2014

Вы можете использовать sshpass , например, в официальных репозиториях debian . Пример:

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
9 голосов
/ 27 августа 2009

Вы не можете с большинством клиентов SSH. Вы можете обойти это, используя SSH API, например Paramiko для Python. Будьте осторожны, чтобы не отменять все политики безопасности.

4 голосов
/ 26 июля 2011

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

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

  1. Установка ssh-askpass Программа (apt-get, yum ...)
  2. Установить переменную SSH_ASKPASS (export SSH_ASKPASS=/usr/bin/ssh-askpass)
  3. С терминала откройте новое ssh-соединение без неопределенной переменной TERMINAL (setsid ssh user@host)

Это выглядит достаточно просто, чтобы быть безопасным, но еще не проверял (только в локальном безопасном контексте).

Вот и мы.

3 голосов
/ 22 марта 2017

Перегонка этот ответ оставляет простой и общий сценарий:

#!/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:

3 голосов
/ 27 августа 2009

Список рассылки FreeBSD рекомендует ожидаемую библиотеку.

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

2 голосов
/ 12 июля 2014

Я не уверен, почему вам нужна эта функциональность, но, похоже, вы можете получить такое поведение с помощью ssh-keygen.

Позволяет входить на сервер без использования пароля с помощью закрытого ключа RSA на вашем компьютере и открытого ключа RSA на сервере.

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

...