Autossh构建阿里云ECS主机公网IP实现内网穿透

一、构建ssh免密登录

        阿里云ECS主机创建后,其公网云主机内部已部署了pravity_key公钥,位于家目录  .ssh文件夹内。同时阿里云 提供了私钥,后缀为pem格式,只需把该私钥重命名为id_rsa,并把该文件复制到内网主机家目录  .ssh文件夹内;最后chmod 0600 id_rsa即可实现内网主机免密登录阿里云公网主机。

二、autossh守护ssh反向穿透内网

       autossh 是一个用来启动 ssh 并进行监控的程序,可在因网络故障断开时重启 ssh,autossh各ssh的参数解析如下:

            -M  : 监视连接状态端口,连接有问题时就会自动重连
            -C  : 启动数据压缩传输
            -c  blowfish|3des :预设是3des(作三次的加密-解密-加密),blowfish 快速区块密码编制器,比3des更安全更快速
            -l   :  指定登录远程主机的用户名
            -i   :  选择所读取使用者的家目录中的 .ssh/的 RSA 认证识别私钥,实现无密码登录
            -p  :  指定远程连接端口
            -q  : 安静模式运行,忽略提示和错误
            -g  : 允许远程主机去连接本地指派的端口,常与 -L  -D组合
            -f   : 后台运行
            -n  : 重导 stdin 到 /dev/null (实际上是避免读取 stdin), 常配合 -f 参数使用
            -N  : 不执行远程命令,专为端口转发量身打造 
            -T  : 不占用shell             注:-NT 常组合,表这个SSH连接只用来传数据,不执行远程操作
            -L  :  正向代理端口转发 ,若在内网运行该参数,格式记作: -L [内IP(可省)]:[内端口]:[公IP]:[公端口]
            -R  :  反向代理端口转发 ,若在内网运行该参数,格式记作: -R [公IP(可省)]:[公端口]:[内IP]:[内端口]
            -D  : 绑定本地端口
            -2  : 强制 ssh 去使用协议版本 2
            -4  : 强制 ssh 去使用 IPv4 地址
            -6  : 强制 ssh 去使用 IPv6 地址

      针对内网穿透的组合参数命令格式为:(于内网主机运行)

           autossh -M [公网云主机监视端口] -CNR  [公网云主机外部访问端口]:[内网IP]:[内网端口] [公网用户名]@[公网IP地址]

       例1:

                         autossh -M 1020 -CNR  1022:0.0.0.0:22 [email protected]

             解析:通过监测公网云主机1021端口,守护ssh连接进程;C 启用数据压缩传输方式,N 启用端口转发,R反向代理,1022:0.0.0.0:22 把[公端口1022]映射到[内IP:0.0.0.0(任意ip)]的[内端口22]上,[email protected]登录用户名及公网ip。该命令启动后,会于内主机后台自动启动一个ssh进程,如下:

                        /usr/bin/ssh -L 1020:127.0.0.1:1020 -R 1020:127.0.0.1:1021 -CNR 1022:0.0.0.0:22 [email protected]

             解析: -L 1020:127.0.0.1:1020把内主机1020端口代理转发到公主机的127.0.0.1回环网卡的1020端口;-R 1020:127.0.0.1:1021然后反向操作,把公主机1020端口转发到内主机的127.0.0.1回环网卡的1021端口。可见autossh的-M参数增加了与云主机间的测试回环,从而监测是否有连接中断。如下图所示:

Autossh构建阿里云ECS主机公网IP实现内网穿透_第1张图片

三、异常处理

        由于阿里云主机搭配的sshd服务会于一段时间后断开没有任何操作的ssh连接,因此需要更改/etc/ssh/sshd_config,开启如下配置:

ClientAliveInterval 30
ClientAliveCountMax 86400
PermitRootLogin no
UsePAM no
PasswordAuthentication no

        对于前两项设置,autossh解释如下:

        Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit. For example, if you are using a recent version of OpenSSH, you may wish to explore using the ServerAliveInterval and ServerAliveCountMax options to have the SSH client exit if it finds itself no longer connected to the server. In many ways this may be a better solution than the monitoring port.

        所以应当在公网云主机上开启ClientAliveInterval和ClientAliveCountMax并把数值改为30及86400

四、设置完成后通过公网IP的1022端口能够访问到内网主机,证明内网穿透成功而且经测试,能够稳定运行。

你可能感兴趣的:(ssh,内网穿透,autossh,网络通信)