>问题
您好,我的问题是我想使用 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
['公钥', 'GSSAPI-keyex', 'GSSAPI-with-mic', 'password']
0
0
期望/想法
我希望代码打印 Hello,但它只打印了 0。它还在握手后和调用身份验证方法后打印了 0,我不知道为什么。似乎我正在与远程机器联系,因为它确实打印出了它将进行的身份验证,但在我看来,我实际上并没有登录并且可以做任何事情。我真的很想使用这个软件包,因为从我在网上阅读的内容来看,它明显更快 paramiko,(替代方案会很好),但我似乎无法弄清楚这里发生了什么。
请提前帮助和感谢!
实际上您可能已连接并执行命令,但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