这是问题的延续:ssh 隧道连接后在本地执行命令”。
我有类似的东西:
ssh -f -L 555:localhost:555 10.0.0.1 sleep 10
vncviewer
但是,在这种情况下,ssh 连接会进入后台,我无法在远程机器上运行任何命令。
所以,我的问题是,我如何才能留在 ssh 控制台中并运行 vncviewer? 在我的例子中是 TigerVNC。
答案1
如果您确实需要先建立隧道,vncviewer
稍后运行,然后才进入远程控制台,那么这是基本脚本:
#!/bin/sh
tmpd="$(mktemp -d)" || exit 1 # temporary directory creation
srvr=10.0.0.1 # remote server
sckt="$tmpd"/"$$-${srvr}".socket # control socket for SSH connection sharing
clean() { rm -rf "$tmpd"; } # cleaning function, removes the temporary directory
# establishing SSH master connection
ssh -o ControlMaster=yes \
-o ControlPath="$sckt" \
-o ExitOnForwardFailure=yes \
-Nf -L 555:localhost:555 "$srvr" || { clean; exit 2; }
# the tunnel is now established
vncviewer >/dev/null 2>&1 & # silent custom command in the background
ssh -o ControlPath="$sckt" "$srvr" # reusing the master connection
# (exit the remote shell to continue)
wait $! # waiting for vncviewer to terminate
ssh -o ControlPath="$sckt" \
-O exit "$srvr" # terminating the master connection
clean || exit 4 # removing the temporary directory
在连接到 Debian 服务器的 Kubuntu 客户端上进行了测试。我不确定它有多强大。将其视为概念验证。请参阅man 1 ssh
和man 5 ssh_config
了解详细信息。