场景
目前有公网服务器A,内网服务器B,现在想通过反向代理的方式来访问内网服务器B。
A:123.123.123.123 端口为3577
1、配置思路
1.由于SSH在一段时间没有数据包之后会断开,所以最好直接使用autossh来配置反向代理。
2.现在将B服务器的22端口绑定到公网服务器A的某一端口PA上,那么当我们请求公网的PA时,公网服务器就会把请求转发到内网服务器上端口22上
2、反向代理
(注意:以下操作都在内网服务器进行,且我是在root角色下进行)
1.安装autossh,我的服务器上装的是Ubuntu18.04,可用以下命令进行安装
apt-get install autossh
2.然后添加我们的内网机器的ssh-key到公网以实现自动登陆:ssh-copy-id <公网机器A的登陆用户名>@<公网机器的ip地址>
ssh-copy-id root@123.123.123.123
如果本机并没有ssh的key,需要先执行ssh-keygen 再进行
3.测试免密登录
ssh root@123.123.123.123
4.利用autossh搭建反向隧道:
autossh -M 50533 -fCNR 3577:127.0.0.1:22 <公网机器A的ssh登录用户名>@<公网机器A的IP>
autossh -M 50533 -fCNR 3577:127.0.0.1:22 root@123.123.123.123
说明:
-M 添加一个端口用于心跳包的发送,该端口只要是服务器上一个可用的未被占用的端口(50533)就行
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器A)的某个端口转发到本地机器(内网服务器B)的指定端口
-L 将本地机器(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
3、开机自启
(注意:这里是全新刚装好的系统)
1.ubuntu18.04不再使用initd管理系统,改用systemd后已经不支持rc.local 这个开机自动启动的脚本了,所以为了能继续用这个脚本,我们需要去编写一个ubuntu18 下的启动脚本,通过这个脚本来启动我的rc.local脚本。
2.systemd默认读取/etc/systemd/system下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。一般系统安装完/lib/systemd/system/下会有rc-local.service文件,即我们需要的配置文件,链接过来
ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
执行命令查看rc-local.service的内容
cd /etc/systemd/system/
cat rc-local.service
如果最后没有[install]区块,则自己添加如下内容
[Install]
WantedBy=muti-user.target
Alias=rc.local.service
创建/etc/rc.local文件 touch /etc/rc.local
赋予权限 chmod 755 /etc/rc.local
说明:
chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。
一般是三个数字:
第一个数字表示文件所有者的权限
第二个数字表示与文件所有者同属一个用户组的其他用户的权限
第三个数字表示其它用户组的权限。
权限分为三种:读(r=4),写(w=2),执行(x=1)。
综合起来:
可读可执行(rx=5=4+1)
可读可写(rw=6=4+2)
可读可写可执行(rwx=7=4+2+1)。
编辑rc.local文件并添加以下内容
#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# auto start autossh
autossh -M 50533 -fCNR 3577:127.0.0.1:22 root@123.123.123.123
echo "添加自启动脚本成功!" > /usr/local/test.log
exit 0
启用服务
sudo systemctl enable rc-local
启动服务
sudo systemctl start rc-local.service
说明:正常开启服务不会报错的(没有红色的Fail.........出现,说明能正常启动)
查看服务状态
sudo systemctl status rc-local.service
重启并检查test.log文件
sudo systemctl restart rc-local.service
cat /usr/local/test.log