利用Putty/Plink通过ssh tunnel端口转发实现FireFox和Chrome的加密代理访问
2010-01-25更新: 如果需要使用远端服务器的DNS:在Firefox中about:config设置 network.proxy.socks_remote_dns ==> true
参考原文:http://thinkhole.org/wp/2006/05/10/howto-secure-firefox-and-im-with-putty/ 加密传输的机制如下:
/ foo.com
浏览器 <==secure tunnel==>ssh server - bar.com
\ example.com
浏览器先通过加密通道链接到一台服务器上,然后通过这个服务器再访问整个互联网。主要的用途就是这个绕道访问。
具体配置过程:
在SSH登录工具Putty的登录设置中配置tunnel,目标设置为Dynamic,添加一个端口7070,再按Add,一个动态转发端口就实现了;
然后用相应帐号ssh登录后:除了登录的终端窗口意外,本地的7070连服务器的22端口之间就有了一个SSH加密的转发通道了。在自己Windows机器上可以用命令行: netstat -n -a 看到有这样一条:
TCP [::1]:7070 [::]:0 LISTENING 0
为了方便切换,可以使用FireFox的SwitchProxy tool插件,设置socks代理通过本地的127.0.0.1:7070 进行传输。

MSN和Chrome的机制类似:就是在连接配置中设置sock5 加密代理。
感谢number5:
更简单方便的setup方式是使用 putty的后台命令行程序[plink](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)plink -N username@remote.ssh.server -D 127.0.0.1:7070其中 -N 表示不需要shell username@remote.ssh.server 换成你ssh帐户名和主机域名或者地址 或者替换成 -load sessionname 也可以,用dreamhost上的帐号试了一下,真的很快
如何在Windows下使用密钥方式登录Linux服务器: 如果设置需要基于密钥的登录(如果不设置密钥密码,就可以自动登录了), 我没有试成使用puttygen生成的密钥(公钥/私钥)直接部署在Linux服务器上。目前成功的方法是:先在服务器上用服务器上用./ssh-keygen生成密钥对,将公钥 id_rsa.pub » 部署到要登录到的服务器上:/home/username/.ssh/authorized_keys 中,密钥在Windows客户端下使用:将密钥 id_rsa下载到本地,然后用puttygen导入id_rsa 另存转换为putty格式的密钥id_rsa.ppk即可。然后使用 plink -i c:\path\to\id_rsa.ppk username@example.com方式登录。 完整配置:
c:\Putty\plink.exe -N -i c:\Putty\foo.ppk bar@example.com -D 127.0.0.1:7070
注意: 加密通道和网站是否提供https没有直接的关系,https是指服务商直接向客户提供的加密,例如:GMail: https://mail.google.com/mail/, GReader: https://www.google.com/reader/view/,从ssh server到服务网站之间仍然是明文的http传输; 加密通道和匿名访问网站也没有直接关系。
💬 历史评论
以下 32 条评论从旧版 Movable Type 博客迁移而来。 原始评论时间:2002–2016 年。
number5 · 2006-12-05 10:47
更简单方便的setup方式是使用 putty的命令行程序plink
plink -N username@remote.ssh.server -D 127.0.0.1:7070
其中 -N 表示不需要shell
username@remote.ssh.server 换成你ssh帐户名和主机域名或者地址
或者替换成 -load sessionname 也可以
用dreamhost上的帐号试了一下,真的很快
dulao5 · 2006-12-05 15:03
这样真的有用吗? 本机和ssh服务器之间的通讯的确加密了,但是服务器替你访问站点时还是非加密通道呀?
还是TOR比较好。
Michael · 2006-12-05 20:38
我不明白一点,为什么用 Firefox 浏览时,不用设置 http 协议的代理地址?
Oasis Feng · 2006-12-05 21:40
我就在用这种方式拿Dreamhost作Socks5代理,加上FireFox的FoxyProxy插件,访问Google Cache和Wikipedia都很方便。 :)
在number5的基础上补充一点:一般SSH服务器都支持公钥验证,用puttygen生成一个key-pair,就可以实现后台自动登陆SSH服务器。
Chris · 2006-12-05 22:45
晕,一直试着想通过DH来建立一个通道自己访问外网,没想到putty居然就可以建立这样的通道啊!
Fwolf · 2006-12-06 00:48
如果我没有理解错误的话 这样就能够通过类似https的方式,访问不提供https的网站,对吧?
另to楼上: ssh访问是通过加密的方式,本机到ssh是明文,ssh到要访问的网站是加密通道才对。
zola · 2006-12-06 06:11
putty这个功能真的太好玩了,我可以骗别人说我到美国了:) 原来这么简单啊:)
alon · 2006-12-06 21:13
弄了个SilenceIsDefeat的账号,好像不行啊,是不是SilenceIsDefeat有限制了? 试了下其他ssh账号是可以的。
alon · 2006-12-06 21:37
在SilenceIsDefeat的faq中找到答案了,连ssh.silenceisdefeat.org就可以建ssh tunnel了
ppip · 2006-12-07 13:41
在linux下如何实现呢?
ppip · 2006-12-08 10:51
To add to what nathan suggested, on linux do 找到的在linux下实现的方式,用ssh命令就可以了。
ssh -qTfnN -D 7070 remotehost.
All the added options are for a ssh session that’s used for tunneling.
-q :- be very quite, we are acting only as a tunnel. -T :- Do not allocate a pseudo tty, we are only acting a tunnel. -f :- move the ssh process to background, as we don’t want to interact with this ssh session directly. -N :- Do not execute remote command. -n :- redirect standard input to /dev/null.
In addition on a slow line you can gain performance by enabling compression with the -C option.
feedss · 2006-12-15 13:47
对于那些不支持socks v5的程序可以用SocksCap V2来转发,SocksCap下载地址 http://www.feedss.com/down/SocksCapV2.zip
lele · 2006-12-19 00:00
您好!请问您有没有联系方式呢?
我的企图:希望能得到你的建议一二,可以吗?我的QQ是674026016,谢谢。
织梦者 · 2006-12-20 10:45
在配置tunnel过程中,如果同时选择第一个选项 Locals ports accept connections from other hosts,能连上你的机器的人就能共享你的tunnel了。例如我在我的电脑开设7070端口同时选择上面的选项。局域网的同事就能用 192.168.0.X(我本机ip)和7070端口连接我的ssh tunnel实现浏览。
织梦者 · 2006-12-20 23:50
By the way,应该是SwitchProxy插件
1288893 · 2007-03-16 17:01
这种方法自己知道自己私底下用还行,如果广而告之,人家服务器管理员不傻,
在ssh配置里加上如下的语句,上面一切方法全部失效…… 到时候,,呵呵……
#cat /etc/ssh/sshd_config ….. ….. AllowTcpForwarding no GatewayPorts no X11Forwarding no ……
鬼仔 · 2007-06-20 19:38
silenceisdefeat.org怎么申请? 我用Paypal给donate@silenceisdefeat.org捐了1$,但是却一点回音都没,都好几天了。当时也给support@silenceisdefeat.org发了封邮件,但是都没有得到回复。。 不知道你们是怎么申请的。
shizhao · 2007-10-29 19:43
找不到ping的地址,手工ping一下: 在Ubuntu下如何通过SSH隧道实现加密代理访问 http://talk.blogbus.com/logs/10543912.html
Eleven · 2007-10-29 22:11
车东老师,问一下。 我使用这个方法好像不行,127.0.0.1连不上去?请问是什么原因引起的?需要开什么端口么? 我没有装防火墙,XP默认防火墙都没有开。
hqin · 2008-01-12 16:36
试了一下 报错了 Server Refused our key 或者 Access Denied
是在Windows 下试验的,是不是和Putty帐户有关啊 请指教
素食环保敬老勤俭 · 2008-03-11 10:00
dns也被劫持了,有没有好的办法?
Kaka · 2008-03-22 18:06
车东老师,我申请了你推荐的那个1美元ssh帐号,但是并不能进行数据转发啊
FK GFW · 2008-04-06 18:45
来个网络代理 http://med.idol-photo.org/0gfw/ 速度蛮快
树杰 · 2008-04-27 15:52
没有SSH账号,可以在这里申请一个:http://blog.showjay.com/posts/free-ssh-account.html
Romoo · 2008-05-25 12:38
这样使用 DH 帐号,主机的 IP 会不会被封啊?
cocobear · 2008-11-06 16:49
不错的方法。
Charles Peng · 2008-11-12 09:43
这是一个不错的办法,适合那些有 SSH 的账户的朋友,但是穿墙工具目前多的去了。
wangwag · 2008-12-10 22:27
我一般用在线代理(Kdaili.com)的,不过这个方法也不错,回去试一试
cheap uggs · 2009-11-09 14:55
能够通过类似https的方式,访问不提供https的网站吗?
nianzog · 2009-11-27 17:52
QQ使用socket代理时要什么用户密码,这个怎么回事?
ebum · 2010-02-19 14:46
没想到车东的博客也被墙了。 我有个问题请教: 请教myentunnel里tunnels的选项该如何设置?我在局域网想使用另一台电脑的ssh-tunnel,不想装ccproxy,而宁愿用privoxy,却都不通。
测试了putty的ssh-tunnel,选中Locals ports accept connections from other hosts后,局域网其他客户机可以正常连接。
请教myentunnel是否可以?
jason · 2010-07-16 14:00
Windos7,Firefox+SSH+Autoproxy,将www.google.com加到autoproxy的列表中, 也就是指定通过代理访问www.google.com但是发现很不稳定, 经常刷新好几下才能打开, 不知道这是配置问题还是什么其他原因, 请教答案, 谢谢…