ssh端口转发

ssh端口转发

ssh端口转发可以做很多事情,尤其是在中国这种GFW无处不在的国家。

每当有重大节日,会议,我们访问外网总是困难,以至于我们连登陆国外的服务器节点都成问题。

ssh端口转发网上有很多教程,但是大部分都是最基础的,比较高级的用法甚少涉及。本文就试图说一些比较常用,但是网上较少说明的用法。

下文仅以本地转发为例说明,假设如下:

  1. 能登陆的服务器为proxy;在proxy上启动的转发端口为FP
  2. 要访问的目的服务器为T;
  3. 登陆目的服务器T的用户名为user;
  4. 登陆目的服务器T的证书为path-to-cert-T;

证书登陆

命令如下:

1
ssh 0.0.0.0:FP:T:22  user@T  -i path-to-cert-T

例如:

1
ssh 0.0.0.0:9020:147.15.12.77:22  guotie@147.15.12.77 -i ./.ssh/server-id

后台运行

SSH还有一些别的参数,非常重要:

  • N参数,表示只连接远程主机,不打开远程shell;
  • T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。

例如:

1
  $ ssh -NT -D 8080 host

  • f参数,表示SSH连接成功后,转入后台运行。

这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。

用在上面的命令中,就是:

1
ssh -fNTL 0.0.0.0:FP:T:22  user@T  -i path-to-cert-T

总结

如果觉得以上内容太多,极简用法如下:

  1. 在能访问的服务器P上启动以下命令:
    1
    ssh  -fNTL  0.0.0.0:FP:T:22  user@T  -i path-to-cert-T

其中:

* FP是在proxy上启动的端口;
* T是目的服务器的IP地址;
* user是T服务器的登陆用户;
* path-to-cert-T是登陆服务器T的证书;
  1. 在本地使用securecrt或者xshell,配置ssh连接T服务器的目的地址和端口分别为P和FP,就可以直接登陆目的服务器。