利用AutoSSH实现远程管理内网服务器


一、组网说明

在这里插入图片描述
Server1为公网上的一台服务器(拥有公网地址,公网可达)。Server2为内网的一台服务器(只有私网地址,没有公网地址)。PC可以连接到公网,但也只有私网地址。

现在的需求是使用PC可以访问到Server2。

测试地址规划:

设备IP地址备注
PC192.168.74.1模拟PC客户端
Server1192.168.74.132模拟公网上的代理服务器
Server2192.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' root@192.168.74.132

上边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
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:2202            0.0.0.0:*               LISTEN      1546/sshd: root
注意到本地是0 0.0.0.0:2202,是侦听所有地址的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 autosshd.service

传统方式可以在/etc/rc.d/rc.local中配置命令。

三、PC连接目标机Server2实现远程管理

这个远程管理又称内网穿透。

1. PC端连接
# bee是Server2上的用户
ssh -p 2202 bee@192.168.74.132

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 -w 22
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:22            127.0.0.1:36374         ESTABLISHED -
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]”如何设置?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后启动本地端口转发
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现autossh的自启动,你可以按照以下步骤进行操作: 1. 创建一个启动脚本:首先,你需要创建一个启动脚本,以便在系统启动时运行autossh。你可以使用任何文本编辑器来创建一个新的脚本文件,比如autossh_start.sh。 2. 编辑启动脚本:在启动脚本中,你需要指定autossh的命令和参数。例如,如果你要使用autossh来建立一个SSH隧道连接,可以在启动脚本中添加以下内容: ```bash #!/bin/bash autossh -M 0 -f -N -L <本地端口>:<目标主机>:<目标端口> <SSH用户名>@<目标主机IP> ``` 请将 `<本地端口>`, `<目标主机>`, `<目标端口>`, `<SSH用户名>` 和 `<目标主机IP>` 替换为实际的值。 3. 保存并退出:完成编辑后,请保存并退出启动脚本。 4. 设置脚本权限:运行以下命令,以确保启动脚本具有执行权限: ```bash chmod +x autossh_start.sh ``` 5. 将脚本添加到启动项:将启动脚本添加到系统的启动项中,以便在系统启动时自动运行。具体的操作方式可能因操作系统而异。 - 对于基于 systemd 的系统(如Ubuntu 16.04+),你可以创建一个名为 `autossh.service` 的服务单元文件,并将其放置在 `/etc/systemd/system/` 目录下。在文件中添加以下内容: ``` [Unit] Description=Autossh Service After=network.target [Service] ExecStart=/path/to/autossh_start.sh [Install] WantedBy=default.target ``` 请将 `/path/to/autossh_start.sh` 替换为实际的启动脚本路径。 然后,运行以下命令以重新加载 systemd 配置并启用服务: ```bash sudo systemctl daemon-reload sudo systemctl enable autossh.service ``` - 对于其他系统(如 CentOS、Red Hat、Debian 等),你可以将启动脚本的符号链接添加到 `/etc/rc.d/rc.local` 文件中。运行以下命令将启动脚本添加到 `rc.local` 文件中: ```bash sudo ln -s /path/to/autossh_start.sh /etc/rc.d/rc.local ``` 请将 `/path/to/autossh_start.sh` 替换为实际的启动脚本路径。 6. 重新启动系统:完成上述步骤后,重新启动系统,autossh应该会在系统启动时自动运行。 这样,autossh就会在系统启动时自动建立 SSH 隧道连接。记得根据你的实际需求和配置进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值