在OSX终端上,我可以使用SSH连接到服务器,因为终端提供密码输入会话。
$ ssh user@server.com
user@server.com's password:
我想制作自己的终端实现,所以我
然后,将字符串ssh user@server.com
推送到父进程的pty master。
但通过节目向我展示了这一点。
$ ssh user@server.com
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
而不是密码会话。
我的问题是什么,我该如何解决?
P.S。我知道我可以使用expect
实用程序。这只是一个实现我自己的伪shell应用程序的试验。
解决方案的关键是使用forkpty()
函数而不是posix_openpt()
函数。前者处理所有困难的烦人作品,并给我双向主文件号。我可以读取和写入文件号。并且创建的pty设备完美运行。 SSH登录会话运行良好。相比之下,后者仍然需要很多我无法弄清楚的作品。
我不得不关心forkpty
最后两个参数。我认为它们是输出,但实际上是输入。这是所有问题的根源,在将它们设置为所有NULL
之后,它现在运作良好。
答案 0 :(得分:4)
答案 1 :(得分:1)