相关问题:启动从服务器到客户端的ssh连接
那里的答案对我很有帮助,此命令可以满足我的需要:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
因此,我编写了脚本来始终重新连接:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
并将其添加到中/etc/crontab
。但是我发现,只要我从shell中“手动”执行它,它就会起作用,但是如果被cron调用,ssh将连接并立即完成。(因此,上面的脚本一直都在重新连接)
从中man ssh
,我发现对于后台连接,我应该使用-n
key 来调用它,但这没有帮助。然后,我只是四处寻找类似的脚本,发现如果调用tail -f something
,它可以工作,即一些“ neverending”命令,所以我刚刚创建了一个空文件/tmp/dummy_file
,现在我的ssh命令如下所示:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
现在可以使用!但是,这种解决方案似乎有点丑陋,而且我还不太了解这种行为的实际原因。只是偶然,我尝试调用bash
而不是tail -f
(bash
我也觉得它是“无休止的”命令)而不是调用。
因此,任何人都可以解释这种现象吗?创建后台ssh连接以保持反向ssh隧道正常的正确方法是什么?
while
循环将一次又一次地运行,ssh
每5秒启动一次新的后台连接,对吗?这不是我所需要的。
&
在ssh命令末尾使用该怎么办:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &