因为工作需要,需要回家后,能够访问公司局域网的服务器。因此就搞了一个SSH的代理。
机器 | IP | 访问 |
---|---|---|
公司内网服务器 A | 192.168.1.1 | 可以访问外网 |
公网服务器 B | xxx.xxx.com | A可访问到 |
任意可以访问B的主机 C | --- | --- |
实施步骤
- 在A上面实现反向代理
ssh -fCNR <port1>:localhost:22 usr_b@xxx.xxx.com
<port1>
为 B 上端口,用来与 A 机器上的22端口绑定。
- 在B上实现正向代理
ssh -fCNL *:<port2>:localhost:<port1> localhost
<port2>
为本地转发端口,用以和外网通信,并将数据转发到 <port1>
。其中的*表示接受来自任意机器的访问。
- 从C上访问A
ssh -p <port2> user_a@xxx.xxx.com
为了让连接能够稳定可靠,可以使用autossh在网络连接断开时,自动重连,在A上执行下面的语句:
autossh -N -f -i /home/user_a/.ssh/id_rsa -y -o BatchMode=yes -R <port2>:localhost:22 usr_b@xxx.xxx.com
为了更加保险,在远端电脑重启时,自动启动autossh
,可以在/etc/rc.local
里面添加如下内容:
su - user_a -c "autossh -N -f -i /home/user_a/.ssh/id_rsa -y -o BatchMode=yes -R <port2>:localhost:22 usr_b@xxx.xxx.com"
其中,user_a是A上的用户,且要求B上,已经有了A主机上用户user_a的公钥,这里不在详细描述。
附:SSH 参数解释
-f 后台运行
-C 允许压缩数据
-N 不执行任何命令
-R 将端口绑定到远程服务器,反向代理
-L 将端口绑定到本地客户端,正向代理
网友评论