Как аутентифицировать ключ доступа из сценария Tcl, называя удар?

У меня есть tcl сценарий, который вызывает много функций от удара включая 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 окно, действительно не имеет значения), пользователь для пароля, таким образом, аутентификация проходит.

Причина я использую удар для ssh, состоит в том, потому что в конечном счете я хочу соединиться с GitHub со сценарием (должен запросить ключ доступа).

1
задан Jack 10 June 2010 в 15:50
поделиться

2 ответа

Попробуйте следующее:

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

Аргумент << к exec передает заданное значение команде на ее stdin

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

2
ответ дан 2 September 2019 в 23:51
поделиться

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

0
ответ дан 2 September 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: