【问题标题】:Keep alive mechanism for ssh over ssh in ParamikoParamiko中ssh over ssh的保持活动机制
【发布时间】:2020-06-14 07:54:08
【问题描述】:

我正在使用 Paramiko 交互式 shell(invoke_shell() 方法)打开本地主机和远程主机之间的会话并向其发送命令。
有时我需要从我的远程主机打开到另一个远程主机的 ssh 连接(这就像通过 SSH 从本地主机到 remote_host_2 通过 remote_host_1 的桥或 SSH)。

为了更好地理解这是一张应该如何表现的图片:

| local host |  -(1)->    | remote host |  -(2)->   | destination host |   

1: 使用 invoke_shell() paramiko 方法打开,因此它将创建一些 paramiko.Channel obj。
2: 使用 Linux 命令打开,即ssh remote_user@remote_ip

这样做是因为有时我与destination host 没有直接联系,如果您通过remote host 打开它,那么应该做出用户决定(输入另一个password,回答yes/no 一些问题等等。)

现在我的问题是关于保持连接有效。
我阅读了keep_alive 机制,paramiko 具有但它没有做我想要的,因为paramiko 知道我的连接结束于remote_host 而不是destination host,所以万一destination host 死了我不会收到有关它的任何通知,命令执行将失败。

我想到的唯一解决方案是在此通道 (\n) 上发送空命令,并尝试在执行所需命令之前从通道读取输出。但这意味着我一方面可以影响我的频道,而且我的命令执行时间现在是原来的两倍。

现在我的问题是,是否有另一种方法来执行此连接,以使这种 keep alive 机制起作用?

附言我读到有一些ServerAliveInterval=30 标志可以帮助我保持ssh 交互式连接处于活动状态,但我不明白如何使用它来验证它没有死。

【问题讨论】:

    标签: python ssh paramiko tunnel


    【解决方案1】:

    正确的方法是使用端口转发实现跳转。
    见Connecting to a server via another server using Paramiko

    然后您将完全控制这两个连接,并且您将能够使用本机 Paramiko 功能来保持连接处于活动状态并检查其状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-24
      • 2015-10-07
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多