引言 最近突然领会了一个导航网站(dashy )的妙用
除了可以放项目地址 ,编译 发布 地址打开对应小程序 之外还可以直接ssh连接到测试服务器;更可以改造脚本直达日志文件位置;让每天的班可以上的开开心心
我暂时没找到可以直接注册url协议的terminal,再加上xshell用起来还不错;因此决定支持ssh://root%40192.168.1.57:22这样的链接直达服务器的功能
解决方案 注册ssh://这样的协议需要修改注册表;假如只用注册表,使用cmd或者powershell这样的脚本都会有黑屏弹窗的问题
只有vbs可以纯后台不弹窗启动应用;因此需要写两个文件:register-ssh-protocol.reg和ssh-handler.vbs
拆分后方便开发及调试;先给出我的文件:
register-ssh-protocol.reg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ssh] @="URL:SSH Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\ssh\DefaultIcon] @="cmd.exe,0" [HKEY_CLASSES_ROOT\ssh\shell] [HKEY_CLASSES_ROOT\ssh\shell\open] [HKEY_CLASSES_ROOT\ssh\shell\open\command] @="wscript \"D:\\Tools\\ssh-handler.vbs\" %1 "
ssh-handler.vbs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ' xshell-handler.vbs Set objArgs = WScript.Arguments If objArgs.Count = 0 Then WScript.Quit ' get url ssh://%USERPROFILE%/test.xsh)rawUrl = objArgs(0) ' 1. replace xsh:// path = Replace(rawUrl, "ssh://", "") ' remove last /If Right(path, 1) = "/" Then path = Left(path, Len(path) - 1) End If ' 2. decode ' path = Unescape(path)path = Replace(path, "%20" , " " ) path = Replace(path, "%40" , "@" ) path = Replace(path, "%3A" , ":" ) path = Replace(path, "%5C" , "\") path = Replace(path, " %22", " "" ") Set shell = CreateObject(" WScript.Shell") ' 3. use enviroment finalPath = shell.ExpandEnvironmentStrings(path) ' 4. Xshell 的实际程序路径 (请根据你的版本确认路径) xshellExe = " "" C:\Program Files (x86)\NetSarang\Xshell 8\Xshell.exe"" " ' WScript.Echo finalPath ' shell.Run " "" C:\Program Files (x86)\NetSarang\Xshell 8\Xshell.exe"" -url [email protected] "" " shell.Run xshellExe & " "" -url "" " & finalPath
补充说明
powershell直接测试xshell的命令为:xshell -url [email protected] ,完整说明请见官方文档:Xshell Command Line Options
cmd中直接测试ssh-handler.vbs的命令为:wscript "D:\Tools\ssh-handler.vbs" ssh://root%40192.168.1.57:22
vbs中显示变量值用WScript.Echo finalPath
url中有部分关键字不能使用,因此需要转义(比如@符号就要用%40)
url通常以/结尾会导致传递给xshell的路径异常:Unable to resolve host ''C': Connection failed因此需要手动移除
参考资料