如何从调用bash的Tcl脚本验证passkey?

时间:2010-06-10 15:50:42

标签: bash authentication cygwin tcl ssh-keys

我有一个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 个答案:

答案 0 :(得分:2)

试试这个:

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

<<的{​​{1}}参数将给定值传递给stdin上的命令

如果这不起作用,您将不得不尝试Expect,或者使用没有密码短语的密钥。

答案 1 :(得分:0)

一个重要的替代方案(我建议)是设置本地密钥处理代理(例如,ssh-agentpageant)来保存解密密钥,以便您的代码不需要处理密码。我发现这是一个更简单的方法,因为它阻止了很多代码必须了解密码的任何内容(比你想象的更难正确处理...)