为什么SSH_ASKPASS不适用于c程序?

时间:2013-08-06 16:54:02

标签: linux ssh

我想知道如何使用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更改为这样的c脚本(显然这是未编译的版本):

#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密钥更适合这种情况;这只是一个学习练习)

谢谢!

1 个答案:

答案 0 :(得分:2)

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

#include <stdio.h>

int main ()
{
    printf("the_password");
    return 0;
}