通过 Python 中的另一个 SSH 跳转服务器从 SSH/Telnet 获取命令结果

Get command result from SSH/Telnet via another SSH jump server in Python

我正在编写 Python 代码到 SSH 或 Telnet 远程主机,执行一些命令并获得结果输出。这里我们有一个跳转服务器,所以代码必须是 "connected" 这个服务器,然后从它,Telnet 或 SSH 到远程主机。

我的所有方法在跳转服务器中都运行良好,例如我可以在其中获取命令的输出。问题是当我尝试从它远程连接到主机时。

import paramiko

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('IP', 22, username="user", password="pass")
stdin, stdout, stderr = client.exec_command("command")
for line in stdout:
     print('... ' + line.strip('\n'))
client.close()

使用库 jumpssh 得到相同的结果,我无法 Telnet 主机。我尝试了以下方法,但出现错误

Administratively prohibited.

from jumpssh import SSHSession

gateway_session = SSHSession('jumpserver','user', password='pass').open()
remote_session = gateway_session.get_remote_session('IP',password='pass')
print(gateway_session.get_cmd_output('command'))

在我工作的最后一家公司,我们获得了支持 Python 脚本的 SSH 客户端的许可,并且在更 "textual" 的处理中工作得很好。

有什么方法可以在 Python 中本地完成相同的任务?

SSHSession 正在尝试通过 gateway_session 打开 direct-tcpip 端口转发通道。

"administratively prohibited" 是 OpenSSH sshd 服务器消息,表明 direct-tcpip 端口转发已禁用。

要启用端口转发,请在 sshd_config 中适当地设置 AllowTcpForwarding and DisableForwarding 指令。


如果您无法在服务器上启用端口转发,则无法使用 jumpssh 库。

如果您可以 shell 访问服务器,您可以使用类似 ProxyCommand 的方法。
参见