繁体   English   中英

仅使用标准库在Python中打开SSH会话

[英]Opening an SSH session in Python with only standard libraries

我正在尝试修复最初在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。 没有ssh库。 我尝试了其他解决方案,但无济于事。 有任何想法吗? 同样,我只需要使用标准库并删除paramiko。

subprocess.Popen()如果没有可用的库,则使用subprocess.Popen()控制本地ssh会话。 这是一种超原始的处理方式,如果可以避免,则不建议这样做。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM