内网穿透——SSH途径

网络环境

权限与运行环境

Server A : sudo组用户userA;openssh-server,openssh

Server B : sudo组(可选)用户userB;openssh-server,openssh

Client C : 不作要求;不作要求

步骤

  1. 登陆 Server B ,修改/etc/ssh/sshd_config,加入或使GatewayPorts yes。(如userB无sudo权限,该步骤可跳过)
  2. 登陆 Server A ,并在终端上操作,其中KEY_FILE是userB的密钥文件(如果userB配置了证书登陆)
    $ ssh -i KEY_FILE -o ServerAliveInterval=60 -o ServerAliveCountMax=5 -fCNR pB:localhost:pA userB@b.b.b.b
  3. (若第一步未执行)登陆Server B,在终端上操作,其中 pB_new 为非 pB 且未被占用的任意端口号
    $ ssh -fCNL *:pB_new:localhost:pB localhost
  4. Client C 访问 Server B 的 pB(若执行第一步而未执行第三步)或 pB_new (若执行第三步而未执行第一步) 端口。

讨论

第一步与第三步的意义在于:ssh的反向代理默认绑定的是远程主机的回环地址,因此要么执行第一步,使得默认绑定于所有可用IP。或者执行第三步,在远程主机上做一个反向代理,将所有IP上的pB_new端口代理到本地回环地址上的pB端口。尽管两者可以同时执行,但颇有一股脱裤子放屁的味道

留下评论