用Obfuscated-OpenSSH解决SSH代理屏蔽问题(下)

Written by

in

我们在上一篇文章《用Obfuscated-OpenSSH解决SSH代理屏蔽问题(中)》里,已经成功的在VPS安装好了Obfuscated—OpenSSH服务,现在我们要做的就是在客户端上进行配置,让SSH代理更加安全。

一、Potty客户端登录

大家都知道通过Putty以SSH协议形式登录VPS,但在这里由于Putty不支持Obfuscated协议,我们只能另辟蹊径,介绍一个新的客户端— Potty(Windows 客户端):

Potty客户端下载地址

http://www.mrhinkydink.com/potty.htm

它不仅支持Putty的所有功能,而且支持握手混淆功能。

下载后打开,可以发现它和Putty的界面几乎一模一样,但最大区别是在这里:

启动“Enable key exchange obfuscation”,并填入上文中设置好的”keyword“,登录端口默认设置为”1234“,输入用户名和密码后就可以成功登录了。

让我们看一下,普通SSH握手和经过混淆加密之后的SSH握手的区别在什么地方:

普通SSH握手

混淆加密后的SSH握手

(图片来源于:http://blog.slpo.net/?p=1234

看来GFW是无法通过握手过程的嗅探来进行屏蔽操作了,不过如果发现端口有大流量的TCP转发,照样会引起墙的注意和关照了,这些都是后话了。

另外较为奇怪的是,我用MyEnTunnel在不需要Keyword的情况下也可以用1234端口登录,但另一个很火的SSSH代理Tunnelier却是没办法登录的,期待高手解决。

二、翻墙代理设置

可能有些朋友说GFW本来就不屏蔽正常的SSH登录,通过Potty混淆加密握手过程岂不是多此一举,是的,下面就要介绍最重要的利用混淆加密躲避GFW对SSH握手环节的嗅探和屏蔽。

进入WindowsCommand命令行,切入到potty.exe文件所在路径下:

Shell

PoTTY.exe -N -ssh User@Server -P Port -pw Pass -C -z -Z yourkeyword -D 127.0.0.1:1080
  • User@Server 处替换为用户名和服务器IP地址
  • “Pass”处替换为服务器登录密码
  • “Port”处替换为登录端口,默认是1234
  • “yourkeyword”处替换登录密钥,默认就是yourkeyword
  • “1080”为自定义端口,需和浏览器代理插件设置相一致

输入完之后回车出现下图对话框,光标在闪动,没问题,这表示已经成功登录。

赶紧用浏览器搭配代理插件浏览网页,OK,速度非常好,而且很少出现掉线情况,大功告成。(浏览器和插件设置和方法可以参见《目前最稳定的翻墙组合chome+Myentunnel+Switchysharp》一文)

三、批处理文件

虽然已经成功链接,但每次都要在命令行里敲代码还是让人觉得麻烦,而且不支持SSH断线之后自动重连也让人觉得这个方案不甚完美,于是我们只能用批处理文件来完善上述功能。

在Potty.exe所在文件目录路径下,按照下面内容新建如下四个文件,当然你需要将颜色标记的部分填写完整:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
gotoprofile1
:profile1
set ServerIP=1.2.3.4
set Port=1234
set User=
set Pass=
set ObfuscatedKeyword=yourkeyword
gotoend
:profile2
set ServerIP=
set Port=
set User=
set Pass=
set ObfuscatedKeyword=
gotoend
:end
1
2
3
4
@echo off
call Config.bat
start PoTTY.exeNssh%User%@%ServerIP%P%Port%pw%Pass%CzZ%ObfuscatedKeyword%D127.0.0.1:1080
exit
1
2
taskkill/f/im“PoTTY.exe”
Connect.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
call Config.bat
set Conn=%ServerIP%:%Port%
@echo off&setlocal enabledelayedexpansion
:Repeat
set ReConn=1
for/f“tokens=4 delims= “%%ain(‘netstat -ano^|find “%Conn%”‘)do(
    echo%%a%time%
    if“%%a”equ“ESTABLISHED”(
        set ReConn=0
        GotoBreak
    )
)
:Break
if%ReConn%==1start/bReconnect.bat
pingn6127.0.0.1>nul
GotoRepeat
pause

CheckConn.bat文件将不断检查TCP连接状态从而确定SSH连接是否会断线,所以,如果Potty一旦断线,那么只需要运行ChenkConn.bat文件就好了。

四、小结

好了,花了四天的时间终于完成了Obfuscated-OpenSSH架设的上、中、下三篇文章,很久都没有花费这么多精力去写Blog了,其实没人愿意花这么大力气去研究什么翻墙方法,我们只是需要一个自由的互联网空间,我们不是每个人看到社会不公或黑暗的地方就要操家伙上街的,我们只是需要知道事实的真相,冷静客观的看待周遭花开花落,而不是天天生活在新闻联播中的幸福中。 上述文章内容我多半只是将旁人已经成功的经验综合整理翻译了一下,并没有多少技术含量,自己也只想抛砖引玉,希望各位多多与我交流,相互学习。