Как аутентифицировать пароль из сценария Tcl, вызывающего bash? - PullRequest
1 голос
/ 10 июня 2010

У меня есть tcl-скрипт, который вызывает много функций из bash, включая ssh. Часть, с которой я борюсь, выглядит так:

proc connect {where} {
    set bash c:/cygwin/bin/bash
    catch {exec $bash -c "ssh $where"} result
    puts $result
}
connect user@localhost

Я получаю сообщение об ошибке аутентификации:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password,keyboard-interactive).

Я не могу понять, как запросить (показывает консоль или окно tk, на самом деле не имеет значения) пользователя для пароля, чтобы аутентификация прошла.

Причина, по которой я использую bash для ssh, заключается в том, что в конечном итоге я хочу подключиться к github с помощью скрипта (необходимо запросить пароль).

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Попробуйте это:

puts -nonewline "enter your passphrase: "
flush stdout
gets stdin passphrase
exec $bash -c "ssh $where" << $passphrase

Аргумент << в exec передает заданное значение команде на свой стандартный ввод

Если это не сработает, вынужно попробовать Expect или использовать ключ без ключевой фразы.

0 голосов
/ 15 июня 2010

Одной важной альтернативой (которую я советую) является настройка локального агента обработки ключей (например, ssh-agent или pageant) для хранения дешифрованного ключа, чтобы вашему коду вообще не нужно было обрабатывать пароли , Я считаю, что в целом это гораздо более простой метод, потому что он мешает большому количеству кода понимать что-либо о паролях (с которыми труднее обращаться правильно, чем вы думаете…)

...