ssh命令行命令提示用户输入如下密码:
密码:
在C中,当我这样做时:
system("ssh name@host");
system("password");
命令行将提示用户并忽略来自我的程序的任何输入。似乎总是接受用户输入的输入。有没有办法重定向我正在添加到stdout的输出并将其输入到ssh的密码提示中?
我尝试了各种各样的东西,从上面到将ssh视为文件指针,如下所示:
FILE *ssh = popen("ssh -t -t -S -o StrictHostKeyChecking=no name@host", "w");
然后写入该文件指针但似乎没有工作。
答案 0 :(得分:3)
事实上。 SSH将打开/dev/tty
并直接从中读取密码,因此您无法以任何方式传递密码。我知道除了使用libssh2
之外,没有办法覆盖这种行为,正如shiplu所说。
答案 1 :(得分:2)
在C
编码时,请考虑使用libssh2 。见this example。
还有更多示例here。
答案 2 :(得分:0)
还有另一种方法可以解决您的问题 - ssh-keygen
和ssh-copy-id
。
基本上,您将公钥复制到主机一次;在此之后的任何连接上,ssh
将自动使用其私钥登录。
运行
ssh-keygen
点击输入3次。运行:
ssh-copy-id user@host
输入您的密码。
就是这样。