无法使用ssh2-python软件包将命令发送到远程计算机

时间:2019-07-18 18:41:25

标签: handshake libssh2 ssh2

问题

您好,我的问题是我想使用ssh2-python软件包来远程读取一堆文件,但是我似乎无法将命令发送到远程主机。

最初我从paramiko软件包开始,但确实可以使用它,但是我要处理大量的大内存文件(这就是为什么我不能将它们带到本地计算机上的原因),这也有点慢。我目前正在运行Python 3.6.3和ssh2-python 0.18.0.post1,并尝试更改ssh2-python的版本,但没有帮助。

代码

import socket
from ssh2.session import Session

host_ip=socket.gethostbyname('hostname')
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host_ip,22))
session=Session()
session.handshake(sock)
print(session.userauth_list('username'))
session.userauth_password('username','password')
channel=session.open_session()
channel.execute('echo Hello')

代码显示以下内容

0

['publickey','gssapi-keyex','gssapi-with-mic','password']

0

0

期望/想法

我希望代码可以打印Hello,但是它只是打印0。在握手之后以及在调用身份验证方法之后,它也打印了0,我也不知道为什么。好像我正在与远程计算机联系,因为它确实打印出需要进行的身份验证,但是在我看来,我实际上并未登录并且可以执行任何操作。我真的很想使用这个软件包,因为从网上阅读的内容来看,paramiko的速度要快得多(其他方法也不错),但是我似乎无法弄清楚这里发生了什么。

请先帮助并感谢!

1 个答案:

答案 0 :(得分:0)

您实际上可能已经连接并正在执行命令,但是channel.execute('ls')返回'0'(它是退出/状态代码)。

如果要从服务器读取响应:

channel.execute('echo Hello')
size, data = channel.read()
while size:
    size, dt = channel.read()
    data += dt

print(data.decode())

ssh2-python的API文档很少,但是这些示例应该使您了解一些基本知识:https://github.com/ParallelSSH/ssh2-python/tree/master/examples

上述内容的完整版本位于example_echo.py