python - 仅使用标准库在 Python 中打开 SSH session

标签 python linux python-3.x ssh paramiko

我正在尝试修复一段最初在 Python 2.X 中开发的代码。我必须使用所有标准库,删除 paramiko,并且需要保持功能不变。可以看到,有端口号配置,用户名,密码等,有什么建议吗?

我尝试过其他 SSH 选项,但都没有用。它返回一个错误。

def grab_and_post_inventory_data(machine_name):
try:
    if not USEKEYFILE?: ssh.connect(str(machine_name), port=PORT, username=USER, password=PASSWORD, timeout=TIMEOUT)
    else: ssh.connect(str(machine_name), port=PORT, username=USER, key_filename=KEY_FILE, timeout=TIMEOUT)
except paramiko.AuthenticationException:
    print(machine_name + ': authentication failed')
    return None
except Exception as err:
    print(machine_name + ":" + err)
    return  None
devargs = {}

输出是一个错误,说 ssh not defined。没有 ssh 库。我尝试过其他解决方案,但无济于事。有任何想法吗?同样,我只需要使用标准库并删除 paramiko。

最佳答案

子进程.Popen() 如果没有可用的库,则使用 subprocess.Popen() 控制本地 ssh session 。这是一种 super 原始的做事方式,如果可以避免,不推荐这样做。

import subprocess
import sys

HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

但推荐的方法是将 paramiko 用于 ssh 客户端和服务器。它将处理所有低级操作。使用起来非常简单。

关于python - 仅使用标准库在 Python 中打开 SSH session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54295844/

相关文章:

python - 如何找到特定数字的最大索引和最小索引列明智的numpy

python - Python 的 Twisted 中 LoopingCall 和 callInThread 的区别

linux - 如何将被盗的数据包返回 Netfilter

linux - 虚拟化 Linux 是否足够快以用于软件开发?

python - 将 TimedeltaIndex 转换为 DatetimeIndex

python-3.x - 搜索特定字符之间的最后一组文本

python - django - 在 templatetag 中显示 OrderedDict

python - 在 Google App Engine 中加载页面后删除 URL 参数

c++ - .cpp 文件在编译后消失

python - 使用 numpy 在网格中显示图像的更惯用方式