运行脚本后保持ssh隧道打开

时间:2019-11-02 01:43:34

标签: bash ssh

我有一台具有间歇性连接的设备,可以“呼唤”打开反向隧道,从而允许我通过SSH进入该隧道。这可以通过systemd可靠地启动,并在任何出口自动重启:

ssh -R 1234:localhost:22 -N tunnel-user@reliable.host

现在,我想在连接时在reliable-host上运行脚本。只需将ssh ... cli进行简单的更改就可以轻松完成:将-N交换为远程reliable-host上的脚本名称:

ssh -R 1234:localhost:22 tunnel-user@reliable.host ./on-connect.sh

问题在于,一旦脚本退出,如果不使用隧道,它将关闭隧道。

我发现一种解决方法是在脚本的末尾加一个长sleep。但是,由于sleep不响应sleep,因此连接断开后,SIGHUP进程仍然存在。我可以在一个无限循环中睡得更短(我想),但这感觉很hack。

~/on-connect.sh

#!/bin/bash

# Do stuff...

sleep infinity

如何使ssh的行为像已被使用过的-N一样,使其保持连接状态而没有任何活动,但还可以在初始连接时运行脚本?理想情况下,不需要在远程脚本中使用特殊的sleep(或等效项),但是,如果不可能的话,当连接断开时,可以对reliable-host进行适当的清理。

0 个答案:

没有答案