利用 XShell 做 SSH 转发

我一般都是习惯于使用各种命令在黑框框内做事情,SSH 也是一样,切换回 Windows 做开发环境之后,一般都是在 Cygwin、MinGW 下弄的。

我发现蛮多同事们都是用的 XShell,我试用过,和 Putty 相比,有一个附加的 SFTP 客户端、可以保存密码、支持多标签页、甚至还可以复制隧道(这个必须点赞)。

我想起来 SSH 常用的端口转发(也叫隧道技术),理论上来说 XShell 这个 SSH 客户端应该也能够吧,不可能说拓展了这么多功能之后把 SSH 最重要的功能之一的端口转发给阉割了呀~

一查果然可以。

应用场景

因为网络隔离,同一个局域网内的 A 和 B,A 能连上服务器 S,B 却不行。

有时因为网络配置的问题,有时候是访问策略问题,有时候是物理连接问题(A 机器连接的是 A 机器上的虚拟机也算作这一类吧)。

解决方案

这个时候 A 可以给 B 做堡垒机,其实就是 SSH 的端口转发而已。

  1. 在“查看”(View)中选中“隧道窗格”(Tunneling Pane);
  2. 在“隧道窗格”的面板中切换到“转移规则”(Forwarding Rule)TAB 页面;
  3. 在“转移规则” TAB 页面右击,并选择“添加”(Add);
  4. “类型”(Type)为默认的 Local(Outgoing);
  5. “源主机”(Source Host)就是你想给他做代理的那一方能访问到你的网络地址,也就是当前机器上的一个 IP;
    默认的 localhost 一般对应的本地环回地址 127.0.0.1,外部不能访问到的。
  6. “侦听端口”(Listen Port)为本地端口,随便选一个端口,比如 6666;
  7. “目标主机”(Destination Host)是服务器那边能够访问的地址,在我们这个场景中就是服务器访问自己的 IP 地址:localhost;
  8. “目标端口”(Destination Port)为服务器那边的端口,在我们这个场景中,一般为 SSH 默认端口 22;

完成之后,转移规则中就新建了一条记录,如果状态是“打开”(open),那就 OK 了,B 就可以用 A 中转,以 ssh root@A -p 6666 的方式来连接服务器了。

如果状态是“失败”(Failed),可能是端口被占用,删除记录,换一个端口重新添加试一下。

参考