handshake - 无法使用 ssh2-python 包向远程机器发送命令
问题描述
问题
您好我的问题是我想使用 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', '密码']
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
推荐阅读
- mysql - MySql 表性能优化 - 哈希作为主键或唯一键
- python - tf.layers.conv2d 和 tf.contrib.slim.conv2d 的区别
- html - CSS 列高填充
- php - 只返回 1 个结果,我怎样才能全部返回?
- vba - 如果单元格值等于“FAIL”,则 Workbook_BeforeClose
- reactjs - 将 React 应用程序发布到 github 页面后运行 NPM 命令时出错。
- firebase - 按键排序并删除查询的第一条记录
- python - 在 geopandas data.frame 的 unpivot 中保留列(但跳过索引)
- excel-2016 - Excel VBA。如何在打印时按顺序计数
- java - 使用 Java 8 连接 Mongo db 3.8.1 时出错