Dev ~/pylibssh2-1.0.0/examples $ python ssh.py 10.20.60.23 root root
data_to_disp -39
Unable to request shell on allocated pty


这个问题在自己本机上却没有问题,同样的代码同样的目标机器,说明目标机是支持pty带shell的,目标机没有了问题。接下来判断就是客户机啦,神了奇了,怀疑是ssh配置的原因或者库的原因,查相关配置,只有authorized_keys中的no_pty,指令指定了用于公钥认证的公钥文件,是目标机的,设置了话,客户端就无法获取pty。后来发现不同用py的客户端c接口可以用,证明和客户端ssh配置无关,难道是c和python调用了不同的库?

通过c接口调用却没有这问题

1,怀疑是库的缘故,通过strace查看,调用的libssh2库都是同一路径下。

2,怀疑是程序不同的问题或者py到c的封装问题,搜索该错误也得不到好的答案,封装问题的话还真不好搞,官方文档可以打印出一些错误信息,如last_error,exit_status但是都没有好结果,或者启用调试接口,一些库的问题都可以通过这种方式,启用调试,如-vv,简单的看了下封装还真看不出名堂。


先排除程序不同问题,发现py文件调用了set_timeout接口,而c却没有,去掉这个还真没有错了,最终的原因就是给的时间不够,在获取shell的过程中就超时了