1

我想知道使用 SSH_ASKPASS 从脚本启动 SSH 会话,所以我写了一个这样的脚本:

export SSH_ASKPASS="/path/passwordScript"
setsid ssh "username"@"host"

其中 passwordScript 是一个 bash 脚本,它像这样回显用户的密码:

#!/usr/bin/env bash
echo "the_password"

其中“the_password”是用户的密码。此过程运行良好,SSH 会话连接成功。

出于好奇,我尝试将 passwordScript 更改为这样的 ac 脚本(显然这是未编译的版本):

#include <stdio.h>

main()
{
    printf("the_password\n");
}

令我惊讶的是,SSH 会话将不再连接。输出如下所示:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).

我想也许 bash 解释器实际上并没有被使用,而 sh 默认情况下正在使用或其他东西。但是,如果我像这样在 python 中设置 passwordScript,则 SSH 会话可以正常工作:

#!/usr/bin/env python
print "the_password"

所以我的问题是为什么 ASK_PASS 不适用于我的 c 程序?

(顺便说一句,我知道 SSH 密钥更适合这种情况;这只是一个学习练习)

谢谢!

4

1 回答 1

2

我的猜测是 SSH_ASKPASS 检查返回码。如果我将 c 程序修改为返回代码 0,一切都会按预期工作:

#include <stdio.h>

int main ()
{
    printf("the_password");
    return 0;
}
于 2013-08-06T18:12:33.783 回答