2009年9月2日星期三

创建自己的免费 ssh -D 服务器

由于某些原因,之前使用的国外 sshd 服务器不能再用了,如果还想像以前那样使用 ssh -D 翻墙的话,估计是要掏腰包啦。当然还有另外一种免费翻墙的办法,就是 vpn ,  比较常用的也就是 ultravpn , 这种方式的缺点就是,它是全局代理,访问国内站点时有点慢(当然可以用路由表解决,不过有点麻烦,关键是我不会 :-))。下面就介绍一种方法利用 ultravpn 创建自己的免费 ssh -D 服务器。
我们要用的工具是 VMware (或者是 Virtualbox) ,   windows xp安装盘(或映像文件),一个 vpn 账号, cygwin。
关于如何安装一个虚拟 windows 和如何申请一个 vpn 账号 ,在这里我就不说了,网上教程很多。(当然你也可以虚拟一个 linux , 考虑到有很多网友对 linux 不是很熟悉,而且在 windows 下连接 vpn 服务器更方便一些,我这里就只介绍如何在  windows 下创建 ssh -D 服务器 )
现在假定你已经有了一个虚拟的 windows (最好把 windows 防火墙关掉) 和一个 vpn 账号。为了方便我们在虚拟的 windows 下创建另一个管理员账号,并且设上密码 。
去 这里 下载 cygwin 安装文件,安装时直接下一步就可以了,在其中选择镜像时推荐使用德国的一个镜像(ftp.gwdg.de),如下图

然后在选择软件包里,注意一定要选择 在 net 分类下的 openssh 包,如下图:

然后直接一路下一步完成就可以了。
配置 sshd 服务
接着双击桌面上的 cygwin 快捷方式,在 cygwin 里输入如下命令:
chmod +r /etc/passwd
chmod +r /etc/group

chmod -R 777 /var
ssh-host-config
在提示 yes/no 时,都输入 yes, 如下:
*** Info: Generating /etc/ssh_host_key
*** Info: Generating /etc/ssh_host_rsa_key

*** Info: Generating /etc/ssh_host_dsa_key

*** Info: Creating default /etc/ssh_config file

*** Info: Creating default /etc/sshd_config file
*** Info: Privilege separation is set to yes by default since OpenSSH 3.3.
*** Info: However, this requires a non-privileged account called 'sshd'.
*** Info: For more info on privilege separation read /usr/share/doc/openssh/READ
ME.privsep.
*** Query: Should privilege separation be used? (yes/no) yes
*** Info: Note that creating a new user requires that the current account have
*** Info: Administrator privileges.  Should this script attempt to create a
*** Query: new local account ’sshd’? (yes/no) yes
*** Info: Updating /etc/sshd_config file
*** Info: Added ssh to C:\WINDOWS\system32\driversc\services
*** Warning: The following functions require administrator privileges!
*** Query: Do you want to install sshd as a service?
*** Query: (Say “no” if it is already installed as a service) (yes/no) yes
*** Info: Note that the CYGWIN variable must contain at least “ntsec”
*** Info: for sshd to be able to change user context without password.
*** Query: Enter the value of CYGWIN for the daemon: [ntsec] 这里直接回车
*** Info: The sshd service has been installed under the LocalSystem
*** Info: account (also known as SYSTEM). To start the service now, call
*** Info: `net start sshd’ or `cygrunsrv -S sshd’.  Otherwise, it
*** Info: will start automatically after the next reboot.
*** Info: Host configuration finished. Have fun!
然后启动 sshd 服务器:
cygrunsrv -S sshd
连接 vpn 服务器,具接步骤就不再说明了。
在虚拟 windows 下找到其 ip 地址,如下图


然后在你自己的真实系统里,启动 myentunnel , 在地址栏填上虑拟机的 ip , 用户名和密码分别用虚拟 windows 的用户名和密码。


然后,你可以参考 这篇 文章,配置代理使连接被墙网站时使用代理了。

使用 expect 防止 sshgfw 代理断线

自从用了 ssh -D 代理后(可参考本 blog 右边的链接),便再也不用为点击某个链接被重置的情况烦恼啦。我在 Linux 使用 ssh -D 连接代理服务器时过一段时间总会断线,于是我就用 expect 写了一个脚本,不担可以防上 ssh 断线,还可以自动输入密码 :-)

关于 expect 我摘录一段在 中文维基 上的介绍:

ExpectUnix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnetftpPasswdfsckrlogintipssh等等。该工具利用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 来穿墙啦。

当然如果你还有什么不了解,欢迎给我留言。我会尽量帮忙。
http://blog.zhuli.name/archives/6644

[小技巧] https加密访问 + AES-256强加密

这两个小技巧目前只适用于Firefox浏览器。

https加密访问:


1. 养成习惯:只要网站具备https加密访问,就在输入网址的时候加上https://

2. 自动判断:Secure connections on sites,此脚本需要Greasemonkey配合。


AES-256 256位强加密:

将Gmail的加密级别从RC4-128调整为AES-256。方法:Firefox下,在地址栏输入about:config,保证小心,在过滤器输入rc4,将所有true手动调为false,清除浏览器缓存,打开Gmail,查看证书,变为如下图所示。完毕。



从此,不仅仅是Gmail,所有的https加密访问都将强制使用AES-256高强度加密,比如FriendFeed、Gdocs等等。

iPhone翻墙教程

1. 在iPhone上使用ssh -D搭配PAC翻’墙

点评:觉得麻烦的可以使用 Hotspot Shield on iPhone,免费且更易设置。

2. GFWlist-PAC项目

点评:sshgfw提供的PAC就是基于它修改而成的。当然,它也是基于Autoproxy的gfwList修改而成的。

完毕。

P.S. 教程是出来不少,但拥有SSH帐号的人可并不多,这里介绍一个30元贩卖SSH帐号的站点——BlockCN。他们与sshgfw没有任何牵连,之所以介绍,是因为相比我们的主机定价——300元——他们在价位上实在很吸引人。

P.S. 如果你希望每天花不到一块钱从而彻底摆脱GFW且不必担忧被封问题,sshgfw主机绝对可以满足你。折腾翻墙的时代过去了,绝不允许GFW二次消耗我们的时间与冲浪体验。