autossh搭建内网穿透服务

   一般来说,外网是无法直接访问公司内网的服务器,这时候就需要借助内网穿透技术来访问了。一般有两种方式,一种是使用现成的工具,比如花生壳,网云穿等,但是会面临流量等各种限制。另外一种是通过具有公网ip的服务器(可以是阿里云等公有云)作为跳板来访问内网服务器,只需要搭建内网穿透服务即可实现,本章主要介绍autossh的搭建方式。
   假设有两台机器,一台是需要访问的内网机器B,一台是作为跳板的外网机器A
   A主机:外网,公网ip:100.55.145.103
   B主机:内网

1. 外网机器A上配置sshd

vim /etc/ssh/sshd_config

配置GatewayPorts为yes

重启sshd

sudo service sshd restart

2. 内网机器B上安装autossh

sudo apt install autossh

3. 配置免密登录(要不然每次都需要输入密码)

(1)在内网机器B上生成公钥和私钥

ssh-keygen

(一直按Enter,最后在~/.ssh/下生成密钥)
ls ~/.ssh/可以看到生产的三个文件:id_rsa id_rsa.pub known_hosts

(2)将内网机器B上的公钥文件复制到外网A机器上

cat id_rsa.pub >> ~/.ssh/authorized_keys

4. 内网机器B上自启动autossh服务

(1)编辑启动命令

sudo vim /etc/systemd/system/autossh.service

[Unit]
Description=autossh
After=network.target

[Service]
ExecStart=/usr/bin/autossh -M 0 [email protected] -i /home/test/.ssh/id_rsa -o StrictHostKeyChecking=no \
-NR 0.0.0.0:9000:localhost:22 \
-NR 0.0.0.0:9001:localhost:8080

[Install]
WantedBy=multi-user.targe

ExecStart配置的是启动autossh命令:
1)-i参数,指定的是步骤3中生成的私钥文件
2)[email protected]指定外网机器A的用户名和IP
3)-NR参数配置的是A机器和B机器的端口映射,例子中配置了两个端口映射:一个是将内网机器B的22端口映射到外网A机器的9000端口;另一个是将内网机器B的8080端口映射到外网A机器的9001端口,有更多映射的时候,可以往下堆-NR参数
4)此外,特别需要注意的是,如果外网机器是腾讯云或者阿里云,需要在公有云上配置入站规则,放通端口

(2)重新加载daemen服务

sudo systemctl daemon-reload

(3)开机启动服务

sudo systemctl enable autossh.service

(4)启动服务

sudo systemctl restart autossh.service

(5)查看状态

sudo systemctl status autossh.service

5. 通过外网机器A访问内网机器B

经过以上步骤后就可以通过外网访问内网了,例如登录内网机器B,可以通过ssh访问:
ssh [email protected] -p 9000

如果访问不通的话,大概率是端口没有开放,可以通过以下两条命令来开放端口(例如8080端口):

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

你可能感兴趣的:(autossh搭建内网穿透服务)