Loading...

    AD: 猛买 | 快递查询 | Jobsdigg | 很棒的男装店

一段脚本让断掉的SSH Tunnel自动重连

可任意转载,但必须在醒目位置以超链接形式标明文章原始出处和作者信息
原文地址:http://www.blogkid.net/archives/2709.html

平时上网用ssh代理,但合上屏幕时就会断掉。用了Macbook之后,随时随地都有shell可以用,于是写了一段脚本来检测ssh tunnel是否还存活。如果没有就启动一个新的连接。

脚本内容:

curl -s -I http://www.google.com/ –socks5 localhost:7070 > /dev/null
[ $? -gt 0 ] && ssh -fN username@hostname -D 7070

脚本很简单,就是使用curl通代理访问一下google(这里也可以是任意别的网站)。如果访问失败了,就重开一个ssh进程监听7070端口。

要使用重连的机制,需要先建立远程服务器对本机的信任关系,这样才可以免输密码。如果觉得搭建信任关系过程太繁琐,可以使用ssh-copy-id这个小工具。

上述两行脚本可以加入到~/.profile(有的也叫.bash_profile)中,这样每次打开屏幕都会做检查,每次开机登录后也会自动连接。如果愿意,也可以加在Crontab中,每隔几分钟跑一下。

这样设置之后,平时基本上不用关心代理了,它会安静地在后台一直跑着。

UPDATE: 我就知道是我老土了。 @murj 推荐autossh,就是类似原理,大家可以关注一下。

6 Responses to “一段脚本让断掉的SSH Tunnel自动重连”


  1. 我的做法更土,不过很有效,直接用while ssh搞定:

    while [[ 1 ]]; do ssh -gCD 7070 user@host.com -o ‘ServerAliveInterval=5′; done;

  2. 2XItong

    一個有趣的現象,大家默認開啟的端口好像都是 7070 ,不知道是不是一種巧合

  3. 原来一直有文章,奇怪了抓虾的feed居然一直没更新

  4. ssh 客户端内置了心跳功能, 在/etc/ssh/ssh_config 中添加 ServerAliveInterval 61 #或者合适的间隔 :)

  5. 这个脚本好,检查的真实,学习了。

  1. [...] 3.自动重连脚本(来自Blogkid大大) [...]

Leave a Reply