SSH那些事儿
SSH那些事儿
September 30, 2011 Fri.
不知道读者中知道SSH有多少,我想除了pro们,剩下的都是用VPS。一般来说,用SSH就是用ssh –D[1]这个动态转发接口,至于做什么用也就不明说了,大家都懂。问题是,SSH只能用来做这些?当然不是。熟悉hg的都知道可以从“ssh://”地址克隆repository[2],那剩下的呢?
故事的起因是office desktop在department firewall之内,用laptop的remote desktop(RDP)连接office需要先用PuTTY之类的神器连接department firewall(OpenBSD的哦),然后再用RDP连接desktop[3]。可是分管防火墙的神一直没有给我打开RDP的3389端口,所以哥一直挣扎不能用。由于之前用过VPS,所以自然想到在desktop弄一个sshd,然后laptop命令行连接。这个很成功,port 22本来就不入firewall法眼,所以逍遥无比,还特地学习了Microsoft的PowerShell[4]打算命令行控制。
随后发现自己太simple了,这么点就满足了?再加上当时用的FreeSSHd[5]的home目录我改不了,所以就放弃了,换上了WinSSHd[6]。这个的配置友好许多,不过我仔细研究了其license,发现其free授权对department的desktop非常不友好,很可能算是侵权,所以只敢用standard授权,最后嫌贵在trial内就放弃了[7]。在这个无助的时候知道了可以用cygwin跑sshd[8],不过配置有点麻烦,我又懒,差点一度放弃回到FreeSSHd。但已经打算用开源授权的不想和商业授权扯上关系,所以继续苦苦寻找,终于找到了CopSSH[9] [10]。这个虽然bug不少,但是很好的封装了cygwin的sshd,并且界面化配置,最终还是确定用这个。
故事还没结束,用了一段时间发现有很多crackers扫描port 22,尝试枚举root,git这些常用账号,一怒之下换用了key pair的验证方式。在desktop上用CopSSH生成了一对keys,然后尝试用PuTTY[11]连接,发现PuTTY不认OpenSSH格式的key。不过PuTTY有个key generator,那个兼职可以读取OpenSSH的key转换成PuTTY的格式(大哥,你为啥不直接支持?又不是代码写不出来)。OK!取消desktop的password验证方式,走人回家。
到了家发现Tunnelier[12]不支持OpenSSH,更不支持PuTTY的可以!!!Masaka!上网找,Tunnelier的人说绝对支持[13],那么就是我发疯了?还好key遵守了The Art of Unix Programming采用文本的模式,可以直接打开读取。乖乖,Tunnelier生成的OpenSSH格式的key和CopSSH里面的OpenSSH生成的最大区别是对Passphrase加密方式的不同,前者用的是DES,后者是AES,而Tunnelier不支持AES(从网上得到验证[14])。正在觉得自己自作孽不可活的时候(无法访问desktop了,晚上程序没地方跑了),发现PuTTY大人的key generator导出的OpenSSH格式的key是DES加密的,souga,搞定~
刚才说的是基本功,那么说说用SSH能做什么。首先动态转发(dynamic forwarding)一如既往的支持着我,我可以在家访问Book24×7(需要university IP)。另一个功能就是打印转发。如果你在用笔记本,要打印,拷到desktop上打印(网络打印机,只能用特定的IP)[15]?爆弱了。这里要用到本地转发(local forwarding)。具体的理论基础可以去看IBM的一篇文章[16],关于网络打印协议可以看微软的MSDN或者TechNet。大致说来,就是设置打印机的时候,IP写localhost,端口写打印机端口(不是网络port,这里要查desktop里面的port设置);然后动态转发设置为本地的port 9100转发到打印机的IP的9100(我感觉这里有点问题,和描述的不同,不过貌似用的是SNMP协议,应该无所谓)[15] [17]。
另一个神奇的功能是remote desktop从port 22转发到远程机器,这样就不必命令行控制了!!!这一招是从Tunnelier[12]学的,用Process Explorer[18]查看Tunnelier的进程就可以发现其命令行格式。大致来说就是随便弄个rdp配置文件(建议打开字体平滑),然后用mstsc [any name].rdp /v localhost:[port]就可以穿过去了。所以以后不要Tunnelier也可以的(继续担心其license限制,不过我目前是个人laptop,没有violation[12])。
最后讲一招。一般来说在home目录下放的文件是可以在“ssh://”地址中直接访问的,我把代码用mklink[19]或者junction[20](XP下用)做了个symbol到home目录。不过后来不知怎么回事,plink连不上了,所以还是换成了hgweb[21]的方式。也就是写一个配置文件,把所有的代码都通过http://localhost:8000/*访问(desktop端),用Windows防火墙限制这个端口不让外部访问。在laptop上开本地转发,在本地访问http://localhost:8004都转发到http://localhost:8000上,那么代码库就建成了。
后记:本文的reference都是来自于网络的,我老板绝对是很反对随便引用Wikipedia的,也有人因为PPT引用别人的成果没著名被开除的,更有因为在开学典礼发言用了别人的话被解雇的。所以以防万一,后文的reference格式如下:Wikipedia的带上版本,一般的页面也加上Google cache的地址。话说加引用加的我要死了。
Reference
[1] Original: http://www.openssh.org/manual.html; Cached: http://webcache.googleusercontent.com/search?q=cache:FZq9Z8gVx-IJ:www.openssh.org/manual.html+&cd=3&hl=en&ct=clnk
[2] Original: http:// mercurial.selenic.com/wiki/FAQ; Cached: http://webcache.googleusercontent.com/search?q=cache:Noccn1OHm1EJ:mercurial.selenic.com/wiki/FAQ+&cd=2&hl=en&ct=clnk
[3] Original: http://helpdesk.civil.ualberta.ca/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=11&nav=0,6; Cached: Not Found
[4] Original: http://technet.microsoft.com/en-us/library/bb978526.aspx; Cached: http://webcache.googleusercontent.com/search?q=cache:-2q3vuxE3pYJ:technet.microsoft.com/en-us/library/bb978526.aspx+&cd=4&hl=en&ct=clnk
[5] Original: http://www.freesshd.com/; Cached: http://webcache.googleusercontent.com/search?q=cache:dFGngCC4BGcJ:www.freesshd.com/+&cd=1&hl=en&ct=clnk
[6] Original: http://www.bitvise.com/winsshd; Cached: http://webcache.googleusercontent.com/search?q=cache:pNHBstbX7p0J:www.bitvise.com/winsshd+&cd=1&hl=en&ct=clnk
[7] Original: http://www.bitvise.com/winsshd-license; Cached: http://webcache.googleusercontent.com/search?q=cache:UlrmeAL-D6oJ:www.bitvise.com/winsshd-license+&cd=1&hl=en&ct=clnk
[8] Original: http://www.petri.co.il/setup-ssh-server-vista.htm; Cached: http://webcache.googleusercontent.com/search?q=cache:y4AUsYfmS78J:www.petri.co.il/setup-ssh-server-vista.htm+&cd=5&hl=en&ct=clnk
[9] Original: http://buffered.io/2009/05/16/setting-up-trac-mercurial-and-ssh-on-windows/; Cached: http://webcache.googleusercontent.com/search?q=cache:RDkYBorL_pMJ:buffered.io/2009/05/16/setting-up-trac-mercurial-and-ssh-on-windows/+&cd=1&hl=en&ct=clnk
[10] Original: http://www.itefix.no/i2/copssh; Cached: http://webcache.googleusercontent.com/search?q=cache:J7_-S3QjbLwJ:www.itefix.no/i2/copssh+&cd=1&hl=en&ct=clnk
[11] Original: http://www.chiark.greenend.org.uk/~sgtatham/putty/; Cached: http://webcache.googleusercontent.com/search?q=cache:e21SJh5st8AJ:www.chiark.greenend.org.uk/~sgtatham/putty/+&cd=1&hl=en&ct=clnk
[12] Original: http://www.bitvise.com/tunnelier; Cached: http://webcache.googleusercontent.com/search?q=cache:ncGSlQ_h1TwJ:www.bitvise.com/tunnelier+&cd=1&hl=en&ct=clnk
[13] Original: https://fogbugz.bitvise.com/default.asp?Tunnelier.2.1135.11; Cached: http://webcache.googleusercontent.com/search?q=cache:7GwXOKEKDREJ:https://fogbugz.bitvise.com/default.asp%3FTunnelier.2.1135.11+&cd=1&hl=en&ct=clnk
[14] Original: https://fogbugz.bitvise.com/default.asp?Tunnelier.2.16692.9; Cached: http://webcache.googleusercontent.com/search?q=cache:nOvTThM9KuMJ:https://fogbugz.bitvise.com/default.asp%3FTunnelier.2.16692.9+&cd=1&hl=en&ct=clnk
[15] Original: http://pigtail.net/LRP/printsrv/tunnel-how.html; Cached: http://webcache.googleusercontent.com/search?q=cache:2EUmdqJMA80J:pigtail.net/LRP/printsrv/tunnel-how.html+&cd=1&hl=en&ct=clnk
[16] Original: https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/; Cached: http://webcache.googleusercontent.com/search?q=cache:rlXx-9Yp4_MJ:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/+&cd=1&hl=en&ct=clnk
[17] Original: http://technet.microsoft.com/en-us/library/cc728404(WS.10).aspx; Cached: http://webcache.googleusercontent.com/search?q=cache:mppvHxcgz0QJ:technet.microsoft.com/en-us/library/cc728404(v%3Dws.10).aspx+&cd=1&hl=en&ct=clnk
[18] Original: http://technet.microsoft.com/en-us/sysinternals/bb896653; Cached: http://webcache.googleusercontent.com/search?q=cache:KUuT8yKzK9IJ:technet.microsoft.com/en-us/sysinternals/bb896653+&cd=1&hl=en&ct=clnk
[19] Original: http://technet.microsoft.com/en-us/library/cc753194(WS.10).aspx; Cached: http://webcache.googleusercontent.com/search?q=cache:7P9kH0aBZhYJ:technet.microsoft.com/en-us/library/cc753194(v%3Dws.10).aspx+&cd=1&hl=en&ct=clnk
[20] Original: http://technet.microsoft.com/en-us/sysinternals/bb896768; Cached: http://webcache.googleusercontent.com/search?q=cache:5usiX2Zsk0kJ:technet.microsoft.com/en-us/sysinternals/bb896768+&cd=2&hl=en&ct=clnk
[21] Original: http://mercurial.selenic.com/wiki/HgWebDirStepByStep; Cached: http://webcache.googleusercontent.com/search?q=cache:mRPktvAAZYUJ:mercurial.selenic.com/wiki/HgWebDirStepByStep+&cd=2&hl=en&ct=clnk