SSH 双跳,带端口转发和立即返回的远程命令

SSH 双跳,带端口转发和立即返回的远程命令

我在堡垒后面有一个远程主机,需要设置端口转发,我想出了以下方法:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        ssh $user@$1 -t -A \
            -L 5900:127.0.0.1:5900 \
            '/opt/enableVNC && while [ 1 ]; do echo "Keeping forwards alive..." && sleep 60; done'
}

我面临的问题是,通过 SSH 连接到远程节点后,我必须运行一个脚本来启用节点上的 VNC 服务器,不幸的是,0一旦服务器启动并运行,此脚本很快就会返回。我调用的脚本不是阻塞脚本,即使我已经建立了端口转发,ssh 会话也会结束。

$ doSSH node1
[email protected]'s password:
user@node1's password:
  VNC is now Enabled
  Listening on 127.0.0.1:5900
Connection to node1 closed.
Keeping forwards alive...
Keeping forwards alive...

似乎在命令的第一部分返回后立即与第二台主机的连接断开,并且我无法保持与第二台主机的连接打开。

在拨打并立即返回的电话后,如何才能保持端口转发的建立?

答案1

我假设您在运行命令时使用了引号(否则,while 循环将在本地执行)。您能在远程主机上创建脚本吗?如果可以,您可以创建一个脚本

#!/usr/bin/env bash
/opt/enableVNC && while [ 1 ]; do sleep 1; done

并在您的会话中运行该脚本ssh

答案2

这段丑陋的代码怎么样:

bastion=xyz.com
user=$( whoami )

function doSSH () {

    ssh $user@$bastion -t -A \
        -L 5900:127.0.0.1:5900 \
        'bash -c "ssh '$user'@'$1' -t -A \
            -L 5900:127.0.0.1:5900 \
            bash -c \"/opt/enableVNC  && while [ 1 ]; do echo Keeping forwards alive... && sleep 60; done\""'
}

相关内容