Xshell虽然是商业软件,但是家庭和学校版还是免费的,所以也用了挺长的时间,积累了不少的连接(会话)和快速命令。
放弃Xshell转投WindTerm的几个理由
- 总感觉Xshell的比较占用资源,启动速度有点慢,尤其多开的时候感觉非常耗资源。
- 虽然可以创建很多的快捷命令,但是无法同时开启两个快捷命令栏,不停的切换又太麻烦,导致快捷命令重复的太多。
- Xshell还不能跨平台使用,Windows里使用的没法在Linux里头同步使用。
- Xshell 7 后面的版本据说会有启动弹窗广告,不过ITGeeker技术奇客至今还没碰到。
- Xshell 6版本以后,免费版每个窗口限制最多开4个标签页
- Xshell启动的窗口大小经常无法记忆,也没找到地方设置。
- Xshell右键粘贴命令时常会有乱码。
- Xshell tail日志的时候没法停止查看
- 用的太久了,想尝试新的工具。
- WindTerm是开源的,完全免费用于商业和非商业用途。资源消耗、性能方面相比要好很多;Windows版本免安装解压即可便携用。
- WindTerm配置文件修改方便,可随意打包保存。同步多台设备的配置可使用git方式。
WindTerm开源地址:https://github.com/kingToolbox/WindTerm/releases 当前Fork1.3K,Star 16.4K
WindTerm作者博客地址,有很多功能介绍及教学等:https://kingtoolbox.github.io/
依据凡事都要有备份方案的原则,觉得不应只依赖一个软件,而且Xshell的跨平台使用的确是个问题,所以打算启用第二个SSH的客户端。国内有蛮多人推荐的客户端叫FinalShell, 但是它的官方主页(http://www.hostbuf.com/t/988.html)让人感觉有点点没那么大气,所以还是选择了这个纯开源的WindTerm.
Xshell转投WindTerm的数据导入导出问题
如何将Xshell的会话导入到WindTerm?
不知不觉的,你会发现你的链接的数量可能至少有几十个,甚至上百个。如何快速地将这些会话导入到WindTerm就成了非常重要的问题。
网上搜了一圈似乎没有直接将Xshell导入到WindTerm的工具,WindTerm官方也讲了因为Xshell是一个商业软件,所以他们不会提供从Xshell导入到WindTerm的工具。这里ITGeeker技术奇客在网上找到了一个SH脚本,可以将Xshell的会话先导入到Putty,然后再在WindTerm里直接导入就可以了。虽然是2019年的脚本,只需修改PATH_XSH参数为正确的路径,亲测可以正常使用。
Xshell 7 会话默认路径: C:\Users\你的用户名\文档\NetSarang Computer\7\Xshell\Sessions
第一步:如何将Xshell会话导入到Putty当中
在Windows本地创建好SH脚本后,打开CMD运行窗口,运行两个命令:
- wsl bash xshell2putty_config.sh
- reg import tmp_xshell2putty_config.reg
这里应该要安装Windows子系统Linux,ITGeeker技术奇客的Windows之前已经安装过的。
第二步:打开Putty,确认会话已成功导入
Putty Windows应用官方链接 https://apps.microsoft.com/store/detail/putty/XPFNZKSKLBP7RJ
这里从Xshell导入的链接可能会有少许是错误的,但基本都可用。
第三步:在WindTerm的的会话窗口空白处,右键点击并选择导入即可完成
如何将Xshell的快速命令导入到WindTerm?请参考ITGeeker技术奇客的原创的转换脚本。
xshell2putty_config.sh脚本参考
脚本原始地址:https://gist.github.com/timedcy/a9da42ec66710e9a28535f769dcee694
#!/bin/bash
# convert to and import putty config from xshell's
# author: timedcy
# date: 2019-12-04
# usage:
# In Windows 10 cmd, execute commands
# wsl bash xshell2putty_config.sh
# reg import tmp_xshell2putty_config.reg
# set vars bellow first
PATH_XSH="/mnt/d/conf/XShellSessions/Links"
PublicKeyFile="D:\\conf\\UserKeys\\keydcy_4096.ppk"
fn_tmp_reg=./tmp_xshell2putty_config.reg
proc_list() {
echo "Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\SimonTatham]
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY]
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions]
" >${fn_tmp_reg}
for xsh in $(ls "${PATH_XSH}"/*xsh); do
proc_xsh $xsh
done
}
extr() { iconv -f utf-16 -t utf-8 $filepath | sed -nr "s#(^${1}=)([^\r]+)#\2#gp" | tr -d '\r'; }
proc_xsh() {
filename="${1##*/}"
name=${filename%.*}
filepath="${PATH_XSH}/$filename"
HostName=$(extr Host)
PortNumber=$(extr Port)
UserName=$(extr UserName)
PortNumber="dword:$(printf '%08x\n' ${PortNumber})"
WinTitle="${UserName}@: ${name}~"
FwdReqCount=$(extr FwdReqCount)
PortForwardings=""
if [[ "$FwdReqCount" -gt 0 ]]; then
for ((x = 0; x < $FwdReqCount; x++)); do
Port=$(extr "FwdReq_${x}_Port")
Host=$(extr "FwdReq_${x}_Host")
HostPort=$(extr "FwdReq_${x}_HostPort")
PortForwardings+="L${Port}=${Host}:${HostPort},"
done
PortForwardings="${PortForwardings%,*}"
fi
echo
echo filepath: $filepath
echo HostName: $HostName
echo PortNumber: $PortNumber
echo UserName: $UserName
echo ${PortForwardings}
echo WinTitle: $WinTitle
echo PublicKeyFile: $PublicKeyFile
echo fn_tmp_reg: $fn_tmp_reg
echo "
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\\${name}]
\"HostName\"=\"${HostName}\"
\"PortNumber\"="${PortNumber}"
\"UserName\"=\"${UserName}\"
\"PublicKeyFile\"=\"${PublicKeyFile}\"
\"PortForwardings\"=\"${PortForwardings}\"
\"WinTitle\"=\"${WinTitle}\"
\"AgentFwd\"=dword:00000001
\"Protocol\"=\"ssh\"
\"FullScreenOnAltEnter\"=dword:00000001
\"LineCodePage\"=\"UTF-8\"
\"TCPNoDelay\"=dword:00000001
\"TCPKeepalives\"=dword:00000001
\"Font\"=\"DejaVu Sans Mono\"
\"FontIsBold\"=dword:00000000
\"FontCharSet\"=dword:00000000
\"FontHeight\"=dword:00000012
\"FontVTMode\"=dword:00000004
" >>${fn_tmp_reg}
}
proc_list