从C程序发送数据到命令行密码提示符

3

ssh命令行命令提示用户输入密码,例如:

密码:

在C语言中,当我执行以下操作:

system("ssh name@host");
system("password");

命令行会提示用户并忽略来自我的程序的任何输入。它似乎总是接受由用户键入的输入。有没有办法将我放到stdout中的输出重定向并将其管道传输到ssh的密码提示中?

我尝试了各种方法,从上面到像这样将ssh视为文件指针:

FILE *ssh = popen("ssh -t -t -S -o StrictHostKeyChecking=no name@host", "w");

我尝试了很多方法在写入到文件指针后,但是似乎都不起作用。


搜索[bash] ssh password以了解你要面对的情况。你可以使用expect来“输入”你的密码,或者使用ssh功能的公钥密码文件,当然,也可以重新发明expect。祝你好运。 - shellter
3个回答

3

确实如此。SSH将打开/dev/tty并直接从中读取密码,因此您无法通过这种方式传递任何输入。我不知道有什么方法可以覆盖该行为,除非使用libssh2,如shiplu所说。


天啊,Hydra 安全工具是这样运作的吗?我一直在查阅源代码,但进展缓慢。 - barndog

2

0

有另一种解决问题的方法 - 使用 ssh-keygenssh-copy-id

基本上,您只需将公钥复制到主机一次;在此之后的任何连接中,ssh 将自动使用其私钥进行登录。

运行

ssh-keygen

按下回车键3次。运行:

ssh-copy-id user@host

输入您的密码。

就这样。


@shiplu.mokadd.im 以什么方式? - Nick ODell
按下回车键3次,这是一个无需密码的密钥。 - Shiplu Mokaddim
我应该提一下,这个练习的目的是因为我正在从头开始构建自己的暴力破解引擎。它已经停顿了,而且我很无聊。此外,这听起来很有趣。 - barndog
@shadow暴力破解技术需要很长时间。你根本不应该在这里使用system函数。它会拖慢你的速度。 - Shiplu Mokaddim
@shadow 不错的项目!抱歉,我误解了你的目标。libssh2是暴力破解器的最佳选择。 - Nick ODell
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接