Ubuntu下autossh 解决内网访问
autossh 解决内网访问准备公网服务器(阿里云、腾讯云都可)需要访问的目标内网服务器公网服务器配置修改公网主机 B 的 SSH 配置文件/etc/ssh/sshd_configGatewayPorts yes这样可以把监听的端口绑定到任意 IP 0.0.0.0 上,否则只有本机 127.0.0.1 可以访问。重启 sshd 服务sudo service sshd restart内网服务器配置在
autossh 解决内网访问
准备
- 公网服务器(阿里云、腾讯云都可)
- 需要访问的目标内网服务器
公网服务器配置
修改公网主机 B 的 SSH 配置文件/etc/ssh/sshd_config
GatewayPorts yes
这样可以把监听的端口绑定到任意 IP 0.0.0.0 上,否则只有本机 127.0.0.1 可以访问。
重启 sshd 服务
sudo service sshd restart
内网服务器配置
在内网主机 A 上,执行以下命令安装 AutoSSH
yum install autossh #centos
apt-get install autossh #ubuntu
断线免密登录自动重连
ssh 反向链接会因为超时而关闭,如果关闭了那从外网连通内网的通道就无法维持,为此我们需要结合免密码登录及 AutoSSH 来提供稳定的 ssh 反向代理隧道。
1、在内网主机 A 上产生公钥和私钥
ssh-keygen
然后按三次回车执行默认选项生成公钥和私钥。会生成密钥文件和私钥文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub
2、拷贝秘钥 在内网主机 A 上继续执行如下命令,将内网主机 A 上的秘钥文件 copy 到公网主机 B 中。
ssh-copy-id username@ip
其中“username”是公网主机 B 的用户名,ip 为公网主机 B 的 ip,然后按照提示输入公网主机 B 的密码就完成了。
启动autossh
注意
前提是公网服务器的22001端口(也可自定义)已经开放,没有的话先去设置安全组
autossh -M 4010 -NR 22001:localhost:22 username@xxx.xxx.xxx.xxx (-p xxxx)
参数解释:
- “-M 4010”意思是使用内网主机 A 的 4010 端口监视 SSH 连接状态,连接出问题了会自动重连
- “ -N”意思是不执行远程命令
- “-R”意思是将远程主机(公网主机 B)的某个端口转发到本地指定机器的指定端口
代码解释:
- “22001:localhost:4000”意思是将内网主机 A 的 4000 号端口转发至公网主机 B 的 22001 号端口上
- “username@xxx.xxx.xxx.xxx”意思是公网主机 B 的用户名和 IP
- “-p xxxx”意思是公网主机 B 的 SSH 端口,如果是默认的 22 号端口,则可以不输入.
查看端口情况
lsof -i:4010
开机自启
在 Ubuntu 中我们可以使用 systemd 管理 autossh 的开机启动问题(旧版本中可以使用 init.d)。配置很简单,只需要创建一个 /etc/systemd/system/remote-autossh.service
文件:
[Unit]
Description=AutoSSH service for remote tunnel
After=network-online.target
[Service]
User=your_username
ExecStart=/usr/bin/autossh -M 4010 -NR 22001:localhost:22 remote_user@a_a_a_a
[Install]
WantedBy=multi-user.target #这个target组内的所有服务都会开机自启,这才是systemctl的关键
这样就创建了一个 remote-autossh
服务,并指定其在网络服务启动后启动。可以运行 systemctl daemon-reload && systemctl start remote-autossh
立即启动服务,或者 systemctl enable remote-autossh.service
启动服务并设置为开机启动。
需要注意的是,配置文件中的 autossh 命令需要替换为其绝对地址,以及不支持 -f
参数。
更多推荐
所有评论(0)