站点图标 ITGeeker技术奇客

如何将Xshell的会话导入到WindTerm

Xshell ➡ Putty ➡ WindTerm

Xshell ➡ Putty ➡ WindTerm

Xshell虽然是商业软件,但是家庭和学校版还是免费的,所以也用了挺长的时间,积累了不少的连接(会话)和快速命令。

放弃Xshell转投WindTerm的几个理由

  1. 总感觉Xshell的比较占用资源,启动速度有点慢,尤其多开的时候感觉非常耗资源。
  2. 虽然可以创建很多的快捷命令,但是无法同时开启两个快捷命令栏,不停的切换又太麻烦,导致快捷命令重复的太多。
  3. Xshell还不能跨平台使用,Windows里使用的没法在Linux里头同步使用。
  4. Xshell 7 后面的版本据说会有启动弹窗广告,不过ITGeeker技术奇客至今还没碰到。
  5. Xshell 6版本以后,免费版每个窗口限制最多开4个标签页
  6. Xshell启动的窗口大小经常无法记忆,也没找到地方设置。
  7. Xshell右键粘贴命令时常会有乱码。
  8. Xshell tail日志的时候没法停止查看
  9. 用的太久了,想尝试新的工具。
  10. WindTerm是开源的,完全免费用于商业和非商业用途。资源消耗、性能方面相比要好很多;Windows版本免安装解压即可便携用。
  11. 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运行窗口,运行两个命令:

这里应该要安装Windows子系统Linux,ITGeeker技术奇客的Windows之前已经安装过的。

第二步:打开Putty,确认会话已成功导入

Putty Windows应用官方链接 https://apps.microsoft.com/store/detail/putty/XPFNZKSKLBP7RJ

这里从Xshell导入的链接可能会有少许是错误的,但基本都可用。

第三步:在WindTerm的的会话窗口空白处,右键点击并选择导入即可完成

如果你的Xshell会话包含子目录,那就需要多次运行,每次设定不同PATH_XSH才行。或者改一下脚本,让它支持遍历各个子目录也行。

by itgeeker.net

如何将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
退出移动版