背景:有三台机器A、B、C,机器 A 位于某局域网内,能够连接到互联网。机器 B 有公网 IP,能被 A 访问到。机器 C 位于另外一个局域网内,能够连接到互联网,能够访问 B。
目标:以 B 为中介,让 C 能够直接通过 ssh 连接到 A。
实现方法:使用 SSH 构建内网穿透隧道
1. 修改机器 B 的 /etc/ssh/sshd_config,设置 GatewayPorts yes
2. 在机器A的 ~/.ssh/authorized_keys 中添加机器 B 和机器 C 的公钥。如果希望机器 A 能够无密码访问机器 B,可以将机器 A 的公钥添加到机器 B 的 ~/.ssh/authorized_keys 中,否则不要添加,不添加则在A上使用 ssh -NR 建立隧道时需要输入机器 B 的密码。
3. 在机器 A 上使用如下命令建立隧道:
ssh -NR [X1]:[X2]:[X3] [X4]@[X5]X1:机器B用于构建隧道的端口X2:机器A的localhost,可以写为 0.0.0.0X3:机器A的端口,表示希望机器C经过隧道访问到的A的端口,对于ssh连接,使用22端口X4:机器B用于构建隧道的用户的用户名X5:机器B的ip
4. 使用机器 C 连接机器 A:
ssh -p [X1] [X6]:[X5]X6:希望登录到机器 C 的用户名,注意该用户不是机器 B 上的用户,而是机器 C 上的用户
注意事项:
需要检查防火墙是否开放对应端口