我有一个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 to ssh的原因是,最终我希望使用脚本连接到github (需要提示输入密钥)。
发布于 2010-06-11 01:42:27
试试这个:
puts -nonewline "enter your passphrase: "
flush stdout
gets stdin passphrase
exec $bash -c "ssh $where" << $passphraseexec的<<参数在其标准输入中将给定值传递给命令
如果这不起作用,您将不得不尝试Expect,或者使用没有密码短语的密钥。
发布于 2010-06-15 21:06:22
一个重要的替代方案(我建议)是设置一个本地密钥处理代理(例如,ssh-agent或pageant)来保存解密的密钥,这样您的代码根本不需要处理密码。总的来说,我发现这是一个简单得多的方法,因为它使许多代码不必理解任何关于密码的东西(这比你可能认为的…更难正确处理)。
https://stackoverflow.com/questions/3016054
复制相似问题