从Python脚本启动交互式SSH会话

10 投票
3 回答
12865 浏览
提问于 2025-04-16 04:01

我想从一个Python脚本启动一个交互式的SSH终端,但不想使用像pexpect或paramiko这样的模块。我想用CentOS自带的Python,这样可以避免兼容性和部署的问题。

我可以使用subprocess模块很好地运行命令,但就是无法获得一个交互式的终端。在Perl中,我只需要用反引号就能做到这一点,但我想找一种更符合Python风格的方法。

有人能给我指个方向吗?

更新 - 根据@leoluk的回答,我参考了docs.python.org上的说明,得出了这个:subprocess.call("ssh ...", shell=True)

3 个回答

-1

如果你想要在自动回复和互动之间找到一个平衡,可以使用pexpect这个工具。

http://www.noah.org/wiki/Pexpect

0

为了让未来来看这个讨论的朋友们更清楚明白,这里有一个使用提问者的 subprocess.popen() 解决方案的例子。

try:
     print("Starting SSH connection...")
     ssh_cmd = 'ssh -vvv -i your_ssh_key -o BatchMode=yes -p 22 user@server_address 2> ssh-error.log'
     subprocess.run(ssh_cmd, shell=True)

except subprocess.CalledProcessError as e:
     raise SystemExit(e)
10

如果我使用 os.system('ssh [...]'),我会得到一个可以互动的终端。

撰写回答