您好,我的问题是我想使用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的速度要快得多(其他方法也不错),但是我似乎无法弄清楚这里发生了什么。
请先帮助并感谢!
答案 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