如何将 paramiko 与 pexpect 一起使用?

Mic*_*tiz 8 python paramiko pexpect

我成功打开了与 paramiko 的 ssh 连接。

由于我想使用 pexpect 与远程系统自动交互,我想将 paramiko 连接传递给pexpect.fdpexpect.fdspawn,但两者不适合在一起。

Paramiko 为我提供了一个文件描述符,但文档明确指出它不能用于读取或写入。我需要的是一个用于读写的双向文件描述符,但我很难弄清楚如何连接这些点。

我明白为什么这段代码不起作用,但我不知道如何创建有效的代码。

#!/usr/bin/env python3

import pexpect
import pexpect.fdpexpect
import paramiko

sshc = paramiko.client.SSHClient()
sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshc.connect('192.0.2.1', username='redacted', password='redacted',
             look_for_keys=False, allow_agent=False)
io = pexpect.fdpexpect.fdspawn(sshc.invoke_shell().fileno())

io.sendline('')
Run Code Online (Sandbox Code Playgroud)

Tim*_*inn 0

答案是使用Fabric,它将自己定义为:

Fabric 是一个高级 Python(2.7、3.4+)库,旨在通过 SSH 远程执行 shell 命令,从而生成有用的 Python 对象作为回报。它构建在 Invoke(子进程命令执行和命令行功能)和 Paramiko 之上