反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
对我们来言,最直接的解释就是,我们可以通过反向代理来在外网的机器访问内网(公司的局域网)的linux主机服务器。
目的:外网主机C能访问(ssh)内网主机 A
需求:C —— 外网的任意linux主机(手机也可以 安装 Juile ssh即可对云服务器ssh 登录)
B —— 我们自己独立的云服务器(连接的转接点,推荐腾讯云入门套餐即可10块一月)
A —— 处于内网(局域网)的虚拟机或者linux主机
正文:
一、首先设置ssh免密码登录
在 内网主机 A 上生产公钥和私钥,并把公钥内容拷到服务器B的~/.ssh/authorized_keys里
$ ssh-keygen -t rsa
...(一直按Enter,最后在~/.ssh/下生成密钥)
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostB
把本机的公钥追到hostB的 ~/.ssh/authorized_keys 里
二、在内网主机A执行反向连接建立端口转发
autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22
语句解释:autossh 没有在线安装即可 (自动登录)
-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连
-N表示不执行远程命令,-f表示后台运行,-R则针对后面的绑定参数进行端口映射。
整体意思是:将本机(服务器A)的22与远程服务器的1234端口进行绑定,相当于远程端口映射(Remote Port Forwarding)。
!!!注:如果这步提示Permission denied, please try again. 首先确定我们是在root用户下登录的,如果还是不可以则进行一下操作:
1、vim /etc/ssh/sshd_config
2、将PermitRootLogin without-password 改为 PermitRootLogin yes
3、service sshd restart
三、此时我们在服务器B 执行以下命令
ss -ant
即可看到端口转发成功
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:5678 *:*
LISTEN 0 128 127.0.0.1:1234 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:1022 *:*
ESTAB 0 0 172.21.0.11:22 113.208.119.46:54996
ESTAB 0 0 172.21.0.11:55862 169.254.0.55:5574
ESTAB 0 0 172.21.0.11:22 113.208.119.46:54967
LISTEN 0 128 :::22 :::*
LISTEN 0 128 :::1022 :::*
四、在服务器B 通过刚刚建立的反向通道,连接到服务器A
$ ssh localhost -p 1234
即可登录 。(主机C 访问A 即可以通过ssh 登录 B 在 通过 上面的反向通道 连接A )
为了保持端口转发的一直在线状态,我们将之前的建立转发的命令 (autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22)增加开机自启项中。
#!/bin/sh -e
#
# 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.
sudo autossh -M 5678 -NfR 1234:localhost:22 userB@hostB -p 22
exit 0
参考自:https://blog.csdn.net/Weiye__Lee/article/details/79337872