如果不存在后台 SSH 连接,则使用 Shell 脚本创建该连接

如果不存在后台 SSH 连接,则使用 Shell 脚本创建该连接

有一个非常类似的问题,但我的情况还有一个额外的细节。

基本上,我使用 ControlMaster 来加速 SSH 连接。因此,我使用:

CurrentUser=$(whoami)
session=$(ps -el | grep $(id -u) |sed -e 's/sshd//g'| grep ssh)
if [ "$session" = "" ]
then
        ssh -TMNf [email protected] &
fi

这段代码之后,我还有另一个命令。ssh 命令的目的仅仅是在后台运行,以便保持打开的套接字以实现更快的连接(如果短时间内没有发生调用,则它会因不活动而超时并关闭。)

问题是这个脚本不会关闭并返回给调用者。它成为一个 <defunct> 进程,直到我手动终止创建的 ssh 会话才会返回。我怎样才能让脚本返回给调用者创建的 ssh 是否在后台运行?

编辑: 我希望创建的 ssh 会话在脚本结束后继续存在,以便保持套接字打开,以便在此之后使用 rsync 命令实现更快的连接。使用打开的套接字,我将传输时间从 3-4 秒缩短至几毫秒

答案1

你想和禁止命令?

答案2

尝试一下 autossh 怎么样:

http://www.harding.motd.ca/autossh/

它为您管理 SSH 连接,并在您启动后返回给调用者。

相关内容