如何发起SSH隧道与暴发户

我不是很习惯syspipe理,最近用两个命令在两台服务器(Ubuntu 12.4上)之间创build了一个SSH隧道:

ssh -fNg -L 3307:127.0.0.1:3306 [email protected] 

它的工作原理,我也将这个命令添加到/etc/rc.local,并在启动时成功启动SSH隧道。 但是,我试图在/etc/init/my_tunnel.conf文件中添加我的隧道,并且在每次启动时都启动了近12个隧道! 我使用了下面的代码:

 start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel[016] respawn exec ssh -fNg -L 3307:127.0.0.1:3306 [email protected] exit 0 

我花了几个小时,不知道为什么以及如何执行这个脚本很多次。 我也尝试过start on[2345] ,完全阅读新贵的手册,但仍然是一样的。 我相信我在这里错过了一些东西。

如果有人能帮助我。 谢谢。

正如c4f4t0r所说,respawn将在脚本退出时再次运行该命令。 通过使用-f它在后台运行,有效地退出并导致新贵重生它。 如果你删除-f,那么它将保持在暴发户意外退出时可以观察到的运行状态。

 start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel[016] respawn exec ssh -Ng -L 3307:127.0.0.1:3306 [email protected] exit 0 

我完全一样,这是设置远程访问Linux机器的好方法:即使本地configuration或连接的IP发生更改,您仍然可以远程访问。

首先,我写了一个脚本来build立隧道,如果它不存在:(我删除所有评论在这里)

 $ cat /root/scripts/tunnels.sh if [ "$1" == "WAIT" ]; then sleep 20; fi TUNNELOK=`ps aux | grep ssh | grep 3307 | sed 's/.*3307.*/TUNNELALLOK/' | sort -u` if [ "$TUNNELOK" != "TUNNELALLOK" ]; then ssh -R 8877:localhost:22 -Ng [email protected] & fi 

然后,我将它添加到crontab而不是initab / upstart:

 # crontab -l |grep tunnel @reboot /root/scripts/tunnel.sh WAIT */5 * * * * /root/scripts/tunnel.sh 

在那里呢…! 在过去我曾经使用initab / upstart,但是上面的解决scheme终于完美地工作了。 在最糟糕的情况下,您必须等待5分钟才能再次显示连接,但您可以在crontab中更改连接。 当然,你必须检查“ps aux”是否适合你的系统。