利用AutoSSH实现远程管理内网服务器
原创
©著作权归作者所有:来自51CTO博客作者cerana的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
一、组网说明

Server1为公网上的一台服务器(拥有公网地址,公网可达)。Server2为内网的一台服务器(只有私网地址,没有公网地址)。PC可以连接到公网,但也只有私网地址。
现在的需求是使用PC可以访问到Server2。
测试地址规划:
设备
| IP地址
| 备注
|
PC
| 192.168.74.1
| 模拟PC客户端
|
Server1
| 192.168.74.132
| 模拟公网上的代理服务器
|
Server2
| 192.168.74.154
| 模拟内网的目标服务器
|
二、基本配置
插曲
AnolisOS8.x兼容Centos8.x使用nmcli及NetworkManager.service管理网络。老式的network.service(yum insetall -y network-scripts)只适用于CentOS7.x。
1. Server2的配置步骤
# 安装autossh
# CentOS
yum install -y autossh
# Ubuntu
apt install -y autossh
# 编译安装
官网:https://www.harding.motd.ca/autossh/
yum install -y autoconf make automake gcc gcc-c++
gunzip -c autossh-1.4g.tgz | tar xvf -
cd autossh-1.4g
./configure
make
make install
$ which autossh
/usr/local/bin/autossh
# 配置Server2 ssh到 Server1的免密登陆
ssh-keygen -t rsa
不给passphrase
ssh-copy-id root@192.168.74.132
# 使用autossh实现Server1到Server2的远程端口转发
autossh -p 22 -M 2212 -NfR '*:2202:127.0.0.1:22'
上边autossh命令的含义是:
Server2使用root这个用户名去连接Server1(192.168.74.132)ssh的22号端口(-p 22),使得Server1(Remote)的2202端口被ssh tunneling到本地(Server2,127.0.0.1)的22号端口上来(单引号中定义)。其中星号“*”表示Server1侦听它所有地址的2202号端口。2212是Server2侦听ssh连接心跳包的的端口(-M参数指定)。如果侦测不到心跳报文则Server2自动重新ssh连接Server1。
2. Server1的配置步骤
[root@Server1 ~]# vim /etc/ssh/sshd_config
GatewayPorts yes
[root@Server1 ~]# systemctl restart sshd
3. 配置验证
bee@Server2:~/.ssh$ netstat -ntpa | grep -w 22
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.74.154:49904 192.168.74.132:22 ESTABLISHED 15887/ssh
[root@Server1 ~]# netstat -ntpa | grep -w 2202
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2202 0.0.0.0:* LISTEN 13381/sshd: root
注意如果看到本地是127.0.0.1:2202说明代理服务器Server1的ssh服务GatewayPorts没有打开。
此时,Server1上只能ssh -p 2202 bee@127.0.0.1登上Server2(其中bee为Server2上的普通用户)。ssh -p 2202 bee@192.168.74.132结果是Connection refused。
正常情况
[root@Server1 ~]# netstat -ntpa | grep -w 2202
4. 在Server2上配置autossh的开机自启动
vim /usr/lib/systemd/system/autosshd.service
[Unit]
Description=AutoSSH Daemon
After=network-online.target
[Service]
User=root
ExecStart=/usr/bin/su -c '/usr/bin/autossh -p 22 -M 2212 -NfR 2202:127.0.0.1:22 root@192.168.74.132' - bee
[Install]
WantedBy=multi-user.target
然后启动服务
systemctl daemon-reload
systemctl start autosshd.service
systemctl status autosshd.service
systemctl enable
传统方式可以在/etc/rc.d/rc.local中配置命令。
三、PC连接目标机Server2实现远程管理
这个远程管理又称内网穿透。
1. PC端连接
PC端还可以使用其他ssh客户端工具,比如:putty,SecureCRT,Xshell,FinalShell,MobaXterm等连接。注意Server1需要配置防火墙规则放开TCP端口2202。
PC一旦ssh连接上Server2就可以通过sftp/scp传输文件了。
2. PC连接Server2后的验证
PC端连接成功后在目标服务器Server2上可以看到
bee@Server2:~$ netstat -ntpa | grep
3. 借助当前建立的PC与Server2的连接配置本地端口转发
借助于当前已经建立的PC与Server2的ssh tunnel连接,我们还可以配置客户端的本地端口转发,实现PC端连接Server2的相关TCP业务,比如http,mysql等。
场景模拟:
PC通过本地端口转发(访问本地127.0.0.1:7001 或者 localhost:7001)去访问Server2上的http服务(Dubbo Admin,端口7001)。

下边以上述场景为例介绍几个常见虚拟终端工具的本地端口转发的配置方法。
注意:要先选中通过autossh建立的PC连接Server2的会话再配置。
3.1 SecureCRT


3.2 Xshell


3.3 FinalShell


3.4 MobaXterm
先找到在哪里配置本地端口转发

或者

开始配置

上图中的账号信息“[bee]”如何设置?




最后启动本地端口转发
