两个内网机器怎么SSH连接
起初我得初想时在机房SSH连接操作宿舍的三个Linux虚拟机,但是装上虚拟机后发现,笔记本不能访问虚拟机;
百度之后才明白,两个内网并且不在同一网段是不能ping通的。后来百度了之后 知道有反向隧道技术;可以借助具有公网ip的服务器作为中转站。
具体方法:
- 需要 服务器A(内网),服务器A必须能够ping通B的ip;
服务器B(公网)服务器B的ip必须是公网并且可以访问; - 修改服务器B(公网)的/etc/ssh/sshd_config 的 #GatewayPorts no
改成 GatewayPorts yes
- 服务器A(内网)进行 ssh -NfR 2222:localhost:22 userb@123.123.123.123 操作
关键词解释:
3.1 f建立成功后在后台运行
3.2 -N只建立连接,不打开shell
3.3 -R将远程主机的某个端口转发到本地主机的指定端口
3.4 -L将本地主机的某个端口转发到远程主机的指定端口
3.5 2222 是服务器B(公网)的某个端口(2222仅仅是举例子), 操作前必须打开且不能被占用,
3.6 22是服务器A的22端口,是Linux默认的ssh连接端口,不可改变;
3.7 userb 是服务器B的用户名,一般选择root就行;
3.8 123.123.123.123 是服务器B的公网ip地址;
- 运行 3 的 命令 会让你输入密码,此时输入的密码是服务器B的密码;
- 然后就可以在服务器B上进行测试:
1. ssh localhost -p 2222
2. 对自身进行 2222 端口的 ssh访问;
3. 此时要求输入的密码是服务器A的密码
4. 然后就进入服务器A了;
- 在随意一台可以说上网的电脑上 对服务器B进行ssh连接。
6.1 ssh userb@123.123.123.123 -p 2222
6.2 对123.123.123.123 进行 端口为2222的ssh连接;
6.3 因为咱们已经设置过了端口转发,所以服务器B会将ssh请求转发到服务器A;
6.4 任意机器能够访问成功,必须在服务器A与服务器B之间有ssh反向隧道,也就是步骤3执行过后的几分钟内;
6.5 但是ssh默认一定时间两台服务器,没有数据通信就自动断开ssh(反向隧道),此时可以在服务器B设置ssh配置文件,以便于长时间保持ssh隧道。
- 修改/etc/ssh/sshd_config文件
7.1. 将ClientAliveInterval 和ClientAliveCountMax 的注释符号去掉
7.2. ClientAliveInterva 作用是每个参数时间向服务器发送请求消息 单位是秒
7.3. ClientAliveCountMax 作用是服务器发送请求后没有接收到响应次数后断开
7.4 ClientAliveInterva 60 ClientAliveCountMax 1440 意思是每隔60s发送一次请求 发送1440(24h)次后都没有接收到回应断开连接。