autossh内网穿透
autossh的用法
内网ip:192.168.1.100
外网ip:10.10.10.10
每台都要安装ssh的客户端。
在这里我使用的是centos7,都自带ssh。
介绍一下使用到的ssh参数:
反向代理
ssh -fCNR
正向代理
ssh -fCNL
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
建立A机器到B机器的反向代理,具体指令为
ssh -fCNR [B机器IP或省略]:[B机器端口]:[A机器的IP]:[A机器端口] [登陆B机器的用户名@服务器IP]
在这里我使用了B机器的7280端口,以及A机器的22端口,按照上面的指令就是这样子的操作
ssh -fCNR 7280:localhost:22 root@123.123.123.123
建立B机器的正向代理,用来做转发,具体指令为
ssh -fCNL [A机器IP或省略]:[A机器端口]:[B机器的IP]:[B机器端口] [登陆B机器的用户名@B机器的IP]
按照第3那里输入的指令,这里的B机器的端口和上面的B机器的端口是一致的,端口1234的也是B机器的。
ssh -fCNL *:1234:localhost:7280 localhost
安装autossh
centos7之后autossh不在是预编译包。所以你不得不从源码编译安装。
wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
tar -xf autossh-1.4e.tgz
cd autossh-1.4e
./configure
make
sudo make install
用autossh建立稳定隧道
来看看具体的autossh的指令为
autossh -M 7281 -fCNR 7280:localhost:22 root@123.123.123.123
autossh的参数与ssh的参数是一致的,但是不同的是,在隧道断开的时候,autossh会自动重新连接而ssh不会。另外不同的是我们需要指出的-M参数,这个参数指定一个端口,这个端口是外网的B机器用来接收内网A机器的信息,如果隧道不正常而返回给A机器让他实现重新连接。
最后配置在Linux上配置开机自动启动autossh,免去了重启Linux后要自己启动的autossh的麻烦
输入:
vi /etc/rc.d/rc.local
添加内容:
autossh -M 7281 -fCNR 7280:localhost:22 root@123.123.123.123
因为centos7之后,原来直接修改/etc/rc.d/rc.local启动脚本自动生效的功能因为修改了需要重新赋予可执行权限
再输入 chmod +x /etc/rc.d/rc.local