1

我有一个 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(需要提示输入密码)。

4

2 回答 2

2

尝试这个:

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

将给定值传递给其标准输入上的命令的<<参数exec

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

于 2010-06-10T17:42:26.920 回答
0

一个重要的替代方法(我建议)是设置一个本地密钥处理代理(例如,ssh-agentpageant)来保存解密的密钥,这样您的代码就根本不需要处理密码。我发现总体而言这是一种更简单的方法,因为它使许多代码不必了解有关密码的任何内容(正确处理密码比您想象的要难……)

于 2010-06-15T13:06:22.260 回答