ssh反向——利用公网服务器连接局域网主机 - Devinwon/article GitHub Wiki
[TOC]
程序员的办公电脑一般都是不关机的,以防下班后有突发的需要被老板紧急召回干活。如果是凌晨深夜,那就更惨了。但往往是通勤2小时,干活1分钟。显然,如果能在家里解决,何必劳力费时来到公司呢!那么现在的困惑就是,公司员工的电脑一般都是位于公司内网,没有固定的公网IP,无法从家里直接相连,见图1。
图1
如果能连上,就可以在家应急干活。问题是怎么才可以连上呢?
无论是家庭个人主机,还是公司办公主机,谁都找不到谁。似乎没有解决的办法。如果能找到一个公共主机拥有固定IP,也就是个人主机和办公主机都认识,那么就可以通过公共主机的桥梁作用(ssh反向),让个人主机和办公主机之间间接相连,如示意图2。
图2
-
开放端口及映射关系
|主机描述|端口|应用| |:---:|:--:|:--:| |private PC|--|--| |work PC|22|ssh| |public server|2022|映射work PC ssh port(22)| |public server|22|ssh| -
首先在work PC上执行操作,让work PC主动连接-->public server,见图3中步骤(1),
图3
命令如下:
ssh -NfR 2022:work_PC:22 public_server_user_name@public_server -p 22
参数说明:
-f,后台执行
-N,不实际连接而是做port forwarding
-R,反向ssh
2022<---->22
public server上的2022端口就被映射成了work PC的22端口
public_server_user_name@public_server -p 22
ssh 登录public server,端口是22
-
private PC---->public server,在private PC上通过ssh登录到public PC,图3中步骤(2)。 命令如下:
ssh public_server_user_name@public_server -p 22
,这样就远程登录到了public server,如图3中(2)所示。 -
在public server上执行端口转发,图3中步骤(3),命令如下:
ssh public_server_user_name@public_server -p 2022
,这样端口就被转发到了work PC 的22端口,输入口令信息后就登入到了work PC中。从而通过public server就在private PC---->work PC建立了连接。
上述方式中,通过ssh 在work PC主动连接-->public server,会存在掉线退出的情况,需要保持连接。一旦掉线,就再次发起连接,需要借助autoshh。 因此,图步骤1中的命令相应修改为:
autossh -M 9022 -NfR 2022:work_PC:22 public_server_user_name@public_server -p 22
参数说明:
-M 9022:work PC上的端口(9022),用于监听work PC--->public server的ssh连接,一旦断开,就再次连接。
- 其他问题:
- 怎么知道端口转发成功呢?图3步骤(1)执行完后,在public serverz中通过
netstat -ntlp
查看,端口2022被监听就说明成功了。 - 如何免密码登录,密钥复制到work PC中即可。
- 如何web映射呢?同样是端口哦
- 怎么知道端口转发成功呢?图3步骤(1)执行完后,在public serverz中通过
- 开启public server端口转发