使用 expect 防止 sshgfw 代理断线
自从用了 ssh -D 代理后(可参考本 blog 右边的链接),便再也不用为点击某个链接被重置的情况烦恼啦。我在 Linux 使用 ssh -D 连接代理服务器时过一段时间总会断线,于是我就用 expect 写了一个脚本,不担可以防上 ssh 断线,还可以自动输入密码
关于 expect 我摘录一段在 中文维基 上的介绍:
Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制
有些 linux 系统里可能没有 expect , 你可以自己安装
在 debian/ubuntu 里 : apt-get install expect
在 opensuse 里:zypper in expect
在 fedora 里: yum install expect
当然还有一些其它发行版都有自己的安装方式。
你可以新建一个文件,比如 sshgfw , 将如下代码复制进去。
#!/usr/bin/expect
set timeout 60
spawn /usr/bin/ssh -D 7070 -g user@yourserver.com
# 这里的 user 为你自己的用户名,yourserver.com 为你自己的服务器域名或 ip
expect {
"password:" {
send "password\r"
#这里的 password 改为你自己的密码
}
}
interact {
timeout 60 { send " "}
}
加上可执行权限 chmod a+x sshgfw, 然后你就可以在它所在的目录 ./sshgfw 执行就行了。当然你也可以把它复制到 /usr/local/bin 或 /usr/bin 等目录下,以方便本机所有用户都可以快捷的使用。
注:ssh 加上 -g (即在代码中的 ssh -D 7070 -g ) 可使局域网内其它机器使用我的机器做代理. 以我的情况为例:我在一个局域网内的 ip 为 192.168.1.16 , 当我联上服务器之后,我就可以使用 localhost:7070 做代理,同时我的局域网内的其它 ip 为 192.168.1.* 的机器,就可以用代理 192.168.1.16:7070 来穿墙啦。
当然如果你还有什么不了解,欢迎给我留言。我会尽量帮忙。


原来真是会断线,怪不得,我要拼命重新登录输入密码~~
我wine了,myentunel效果还不错,显然script更好用!
谢谢!!
在 expect 前最好加上一个 match_max 吧。
请问这个要想在Mac OS下用, 该怎样做?
谢谢
@Hinc
嗯,谢谢!:-)
@William
我没有 Mac, 所以我也不太清楚。但是如果用 Mac OS 的话应该也可以照样用吧。我不清楚 Mac 里有没有 expect ,如果没有用 Macports 应该可以很容易的装上。
你好。可否提供個SSH帳號給我。。由於在被牆包圍的地方裡,我不能做這文章的轉載,但我會用其它方式告知別人的。。謝謝。。。
@gfwgo2hell
已发你 Email
@admin
郵件已收到,謝謝你的分享。
用autossh跑成daemon最佳
autossh
http://www.harding.motd.ca/autossh/
你好,能否帮忙申请一个ssh帐号,我现在用的VPN,时常不稳定。请原谅不能转发
您的文章,我会采取其他方式做的,谢谢!
archlinux下使用免费Ultravpn代理
windows下Ultravpn的使用非常简单,去http://ultravpn.fr/下载一个ultravpn-install.exe文件安装,然后http://ultravpn.fr/account.htm申请一个免费的帐号登录连接就可以了。我使用的是Archlinux,虽然linux下使用Ultravpn的介绍文章很多(如使用openvpn+networkmanager等),但照着做下去,总有各式各样的问题。好不容易找到一个英文的介绍文档,做下去终于成功。下面将方法详细翻译过来,以方便大家特别是新手安装。该方法应该也适用于其他的linux发行版,关键要搞清楚配置文件的路径。
1、申请帐号:和windows下一样,首先去http://ultravpn.fr/account.htm申请一个免费的帐号。
2、安装openvpn:对Archlinux,使用yaourt 安装执行:yaourt openvpn 或者root权限执行:pacman -S openvpn 命令即可,目前的版本是openvpn-2.1_rc19-4 。其他发行版请采用适当的命令安装,如Fedora用sudo yum install openvpn。安装完成后,配置文件在/etc/openvpn目录下,其他发行版请注意相应的配置文件的安装路径。
3、创建连接配置文件和证书文件:我们采用借用windows下配置文件和证书文件的方法。去http://ultravpn.fr/下载一个ultravpn-install.exe文件安装到一台windows XP的机器上,windows下默认的安装路径是 c:\Program Files\UltraVPN,如果您找不到可用的windows机器,也可以采用linux下的wine模拟安装,命令为:wine ultravpn-install.exe(请先安装wine!)。一般的安装目录在~/.wine/drive_c/Program\ Files/UltraVPN/。
4、拷贝windows下的配置文件于linux下使用:将windows机器上安装路径 c:\Program Files\UltraVPN\config目录中的client.ovpn和ca.crt两个文件拷贝到archlinux的/etc/openvpn/目录,并且重命名为 UltraVPN.conf 和 UltraVPN.crt。
5、编辑配置文件:用文本编辑器打开UltraVPN.conf ,将其中的”cert ca.crt” 一行改为”ca /etc/openvpn/UltraVPN.crt”,并且在该行的下一行加上一行:route xxx.xxx.xxx.xxx 255.255.255.255 net_gateway。把这里的 xxx.xxx.xxx.xxx 替换
为你当地的DNS地址,如 202.61.95.35 。
6、连接代理服务器:打开终端,以root权限执行命令:openvpn /etc/openvpn/UltraVPN.conf ,即可以出现登录画面。
输入你申请到的用户名和密码即可,如下所示:
___________________________________________________________________________________
[root@MYNEW wpp]# openvpn /etc/openvpn/UltraVPN.conf
Fri Oct 9 05:21:38 2009 OpenVPN 2.1_rc19 i686-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Sep 22 2009
Enter Auth Username:*********用户名
Enter Auth Password:*********密码
______________________________________________________________________________
连接时间视网络状况而定,连接成功后的画面如下(出现 nitialization Sequence Completed 字样):
_______________________________________________________________________________
Fri Oct 9 05:45:11 2009 OPTIONS IMPORT: timers and/or timeouts modified
Fri Oct 9 05:45:11 2009 OPTIONS IMPORT: –ifconfig/up options modified
Fri Oct 9 05:45:11 2009 OPTIONS IMPORT: route options modified
Fri Oct 9 05:45:11 2009 OPTIONS IMPORT: –ip-win32 and/or –dhcp-option options modified
Fri Oct 9 05:45:11 2009 ROUTE default_gateway=192.168.1.1
Fri Oct 9 05:45:11 2009 TUN/TAP device tun0 opened
Fri Oct 9 05:45:11 2009 TUN/TAP TX queue length set to 100
Fri Oct 9 05:45:11 2009 /sbin/ifconfig tun0 10.8.181.186 pointopoint 10.8.181.185 mtu 1500
Fri Oct 9 05:45:11 2009 /sbin/route add -net 87.98.173.225 netmask 255.255.255.255 gw 192.168.1.1
Fri Oct 9 05:45:11 2009 /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.181.185
Fri Oct 9 05:45:11 2009 /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.8.181.185
Fri Oct 9 05:45:11 2009 /sbin/route add -net xxx.xxx.xxx.xxx netmask 255.255.255.255 gw 192.168.1.1
Fri Oct 9 05:45:11 2009 /sbin/route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.181.185
Fri Oct 9 05:45:11 2009 Initialization Sequence Completed
______________________________________________________________________________
7、如果不希望每次都输入用户名和密码,则可以在上述配置文件的同一目录下建立一个名为UltraVPN.pw的文件,文件只有两行,第一行为用户名,第二行为密码。修改配置文件UltraVPN.conf 的最后一行“auth-user-pass“
为:auth-user-pass /etc/openvpn/UltraVPN.pw 即可。
下面是我的配置文件UltraVPN.conf 内容,供参考。
client
dev tun
proto udp
hand-window 15
remote-random
remote servers443.ultravpn.fr 443
remote servers24.ultravpn.fr 24
remote servers21.ultravpn.fr 21
remote servers54.ultravpn.fr 54
remote servers24.ultravpn.net 24
remote servers443.ultravpn.net 443
resolv-retry infinite
nobind
# Try to preserve some state across restarts.
persist-key
persist-tun
ca /etc/openvpn/UltraVPN.crt
route 3.4.5.6 255.255.255.255 net_gateway
# Enable compression on the VPN link.
# Don’t enable this unless it is also
# enabled in the server config file.
comp-lzo
# Set log file verbosity.
verb 3
auth-user-pass /etc/openvpn/UltraVPN.pw
windows的软件越来越匮乏了,看来不得不去学Linux了。
哈哈,谢谢啦,解决了我两个大麻烦。
感谢楼主,今天刚好用上。