Paramiko 中 ssh over ssh 的 keep alive 机制
Keep alive mechanism for ssh over ssh in Paramiko
我正在使用 Paramiko 交互式 shell(invoke_shell()
方法)在本地主机和远程主机之间打开会话并向其发送命令。
有时我需要从我的远程主机打开到另一个远程主机的 ssh 连接(这就像通过 SSH 从本地主机通过 remote_host_1 到 remote_host_2 的网桥或 SSH)。
为了更好地理解这是一张图片,它应该如何表现:
| local host | -(1)-> | remote host | -(2)-> | destination host |
1: 使用 invoke_shell()
paramiko
方法打开,因此它会创建一些 paramiko.Channel
对象。
2: 使用 Linux 命令打开,即 ssh remote_user@remote_ip
这样做是因为有时我与 destination host
没有直接连接,如果您通过 remote host
打开它,则应由用户决定(输入另一个 password
,回答 yes/no
一些问题等等。)
现在我的问题是关于保持我的连接。
我阅读了 paramiko
拥有的 keep_alive
机制,但它并没有按照我的意愿行事,因为 paramiko
知道我的连接结束于 remote_host
而不是 destination host
所以如果 destination host
死了,我将不会收到任何有关它的通知,并且命令执行将失败。
我想到的唯一解决方案是在此通道 (\n
) 上发送空命令,并在执行所需命令之前尝试从通道读取输出。但这意味着我一方面可以影响我的频道,而且我的命令执行时间现在是原来的两倍。
现在我的问题是,是否有另一种方法来执行此连接,以便此 keep alive 机制起作用?
p.s。我读到有一些 ServerAliveInterval=30
标志可以帮助我保持 ssh
交互式连接处于活动状态,但我不明白如何使用它来验证它没有死。
正确的做法是使用端口转发实现跳转
参见
然后您将完全控制这两个连接,并且您将能够使用本机 Paramiko 功能来保持连接活动并检查其状态。
我正在使用 Paramiko 交互式 shell(invoke_shell()
方法)在本地主机和远程主机之间打开会话并向其发送命令。
有时我需要从我的远程主机打开到另一个远程主机的 ssh 连接(这就像通过 SSH 从本地主机通过 remote_host_1 到 remote_host_2 的网桥或 SSH)。
为了更好地理解这是一张图片,它应该如何表现:
| local host | -(1)-> | remote host | -(2)-> | destination host |
1: 使用 invoke_shell()
paramiko
方法打开,因此它会创建一些 paramiko.Channel
对象。
2: 使用 Linux 命令打开,即 ssh remote_user@remote_ip
这样做是因为有时我与 destination host
没有直接连接,如果您通过 remote host
打开它,则应由用户决定(输入另一个 password
,回答 yes/no
一些问题等等。)
现在我的问题是关于保持我的连接。
我阅读了 paramiko
拥有的 keep_alive
机制,但它并没有按照我的意愿行事,因为 paramiko
知道我的连接结束于 remote_host
而不是 destination host
所以如果 destination host
死了,我将不会收到任何有关它的通知,并且命令执行将失败。
我想到的唯一解决方案是在此通道 (\n
) 上发送空命令,并在执行所需命令之前尝试从通道读取输出。但这意味着我一方面可以影响我的频道,而且我的命令执行时间现在是原来的两倍。
现在我的问题是,是否有另一种方法来执行此连接,以便此 keep alive 机制起作用?
p.s。我读到有一些 ServerAliveInterval=30
标志可以帮助我保持 ssh
交互式连接处于活动状态,但我不明白如何使用它来验证它没有死。
正确的做法是使用端口转发实现跳转
参见
然后您将完全控制这两个连接,并且您将能够使用本机 Paramiko 功能来保持连接活动并检查其状态。