28号的时候SSHChina又断了整整一天,无法,只好在网上找个临时的。翻了一下,发现Paying.org.ru还不错,只是会半个小时就修改密码并且断线一次。Bitvise Tunnelier蛮好用,但是每半个小时就打开浏览器再复制粘贴,也太折磨人了。
网上现成的脚本大多不是Windows里可以用的,而且也处理不了密码会变的问题,所以就自己写了个。这个脚本比较适用于频繁修改密码的SSH帐户,登陆信息固定那种还是用Bitvise Tunnelier吧。
话说,每次为了方便给别人用而逼不得已写VBScript或者JavaScript的时候我都在想,Windows要是内置一套Ruby该多好……
将以下内容保存为letsSSH.js,再去下一个Plink放到同一个目录,双击letsSSH.js即可。
function lets_ssh(ask_for_account) { var fso = new ActiveXObject('Scripting.FileSystemObject'); var plink = fso.GetParentFolderName(WScript.ScriptFullName) + '\\plink.exe'; var sh = new ActiveXObject('WScript.Shell'); var ios; var s, cmd, buf; while (true) { s = ask_for_account(); cmd = plink + ' -N -D 127.0.0.1:7070 -l ' + s[2] + ' -pw ' + s[3] + ' -P ' + s[1] + ' ' + s[0]; if (_debug) WScript.Echo(cmd); ios = sh.exec(cmd); buf = ''; while (true) { try { buf += ios.StdErr.read(1); // 写大了不成,会等读满N个字符才返回 if (/Store key in cache\? \(y\/n\)/.test(buf)) { ios.StdIn.write("n\n"); } } catch(e) { break; } } } } function bytes_to_str(data, charset) { var stm = new ActiveXObject('ADODB.Stream'); stm.Type = 1; stm.Open(); stm.Write(data); stm.Position = 0; stm.Type = 2; stm.Charset = charset; var s = stm.ReadText(); stm.close(); return s; } function get_account(url, args) { var xhr = new ActiveXObject('Msxml2.XMLHTTP'); var s, html, r, re = / charset=([^"']+)[^"']?/i; var n = 0; while (n < 3) { try { xhr.open('GET', url, false); xhr.send(); if (xhr.getResponseHeader('Content-Type').match(re)) { html = xhr.responseText; } else { r = xhr.responseText.match(re); if (r) { html = bytes_to_str(xhr.responseBody, r[1]); } else { throw 'Unknow Content Charset!!'; } } s = []; for (var i=0;i<args.length;i++) { if (typeof(args[i]) == 'string') { s.push(args[i]); } else { r = html.match(args[i]); s.push(r[1]) } } break; } catch(e) { WScript.Echo(e.description); } n++; } if (s.length != 4) { WScript.Echo("Cannot Get SSH Account Info!\n" + url); WScript.Quit(-1); } return s; } function paying_org_ru() { return get_account( 'http://blog.paying.org.ru', [ /服务器地址:.*?value="(\d+\.\d+\.\d+\.\d+)"/, '22', /服务器用户:.*?value="([^"]+)"/, /服务器密码:.*?value="([^"]+)"/ ] ); } function sshdlw_com() { return get_account( 'http://www.sshdlw.com/ssh/gd/46.html', [ /ssh服务器 :<font color="#000000">([^<]+)<\/font>/, /ssh端口:<\/strong><\/span>(\d+)/, /帐号:<\/strong><a href="[^"]+"><strong>([^<]+)<\/strong><\/a>/, /<strong>密码:([^<]+)<\/strong>/ ] ); } var _debug = false; if (/cscript.exe$/i.test(WScript.FullName)) { _debug = true; lets_ssh(paying_org_ru); } else { // Shell.Exec无法隐藏plink窗口,所以只能这么干 var sh = new ActiveXObject('WScript.Shell'); var r = sh.Run('cscript.exe "' + WScript.ScriptFullName + '"', 0, true); if (r != 0) { WScript.Echo('Something Wrong...'); } }
6 条评论 :
这个很赞啊,我去试试。还是那么晚睡觉?
其实如果是firefox用户的话可以用gappproxy要比换了域名的sshchina好一点
顺带一提祝贺em官方译本认证成功..
SSHChina断掉也不是一次两次,虽然每次都很不爽,不过50来块一年,其实也不算很糟糕了。
GAE还是太慢了些,HTTPS也是个问题。而且写这个东西主要是因为最近问我怎么爬墙的人越来越多,什么都不用设置对于那些人和我来说都能省好多力气。
em认证成功是啥意思?我倒是又寄了一次给他们,可还没回音的说。
我这边sshchina倒是也偶尔断,不过还勉强能用
gappproxy看youtube倒是比sshchina快
em的是文化差异,耐心等就好了
p.s.或许他真的又没收到邮件..
换gmail再发一次?
或者被垃圾邮件淹没了..
没找到标题带oCameLo的..
我倒,你居然会去爬em官网?
我用的本来就是gmail,这次已经收到回信了,不知道上次是怎么搞的。
我的sshchina帐户在10号服务器,大陆这边用的是电信,看u2b除了要输验证码之外,速度方面倒是没什么问题。
ssh貌似明年3年到期,应该还会续费吧。
发表评论