外网通过ssh代理连接内网服务器

内网服务器通过公网ssh代理实现内网穿透

前言

有时需要通过外网连接到内网的服务器。

  • 前提:需要有广域网服务器,服务器之间免密。

1 环境

服务器类型 系统 主机名 用户名 IP 说明
客户端 Window 10 node1 本机 ssh连接工具(例如:Xshell)
中转服务器 ubuntu 16.04 node2 user2 8.8.8.8 有广域网IP
目标服务器 ubuntu 16.04 node3 user3 172.16.156.101 局域网IP,可以访问外网

2 配置目标服务器

2.1 安装autossh服务

sudo apt install -y autossh

autossh命令参数解释如下:

  • -f 后台运行
  • -C 允许压缩数据
  • -N 不执行任何命令
  • -R 将端口绑定到远程服务器,反向代理
  • -L 将端口绑定到本地客户端,正向代理
  • -p 转发服务器B的SSH登录端口号,默认为22

结合:

  • ssh -fCNR 反向代理
  • ssh -fCNL 正向代理

2.2 命令行配置连接中转服务器--临时有效

建立目标服务器到中转服务器的反向代理,具体指令为

autossh -M 中转服务器端口 -fCNR [中转服务器IP]:中转服务器端口:目标服务器IP:目标服务器端口 中转服务器用户名@IP

例如:

autossh -M 5000 -o "ServerAliveInterval 30" -CNR 6000:localhost:22 [email protected]
  • 说明:端口可以自定义,
  • 第一次连接时不加-f后台运行,需要测试;
  • -M 5000:中转服务器用来接收目标服务器的信息,如果隧道不正常而返回给目标服务器让他实现重新连接,相当于会话保持;
  • -o "ServerAliveInterval 30":保持会话时间间隔,autossh中应该可以省略;
  • -CNR 6000:6000为中转服务器的反向代理端口;
  • localhost:22:目标Linux服务器的ssh端口,默认22。

3 配置中转服务器

3.1 测试连接目标服务器

ssh $user3@localhost -p 6000

如果可以执行表示成功!

3.2 建立中转服务器的正向代理

建立中转服务器的正向代理,用来做转发,具体指令为

ssh -fCNL [目标Linux服务器IP]:目标Linux服务器端口:中转服务器IP:中转服务器端口 中转服务器用户名@中转服务器IP

例:

ssh -fCNL "*:3000:localhost:6000" $user2@localhost

输入目标服务器的密码

3.3 客户端

直接配置Xshell

IP:8.8.8.8

端口:3000

用户名:$user3

密码:XXXXXXX

或者任意服务器登陆;

ssh -p 3000 [email protected]

输入目标服务器的密码

4 配置自启动

4.1 适用于CentOS6 和 CentOS7

输入

vim /etc/rc.d/rc.local

追加如下内容

autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 [email protected]

ServerAliveInterval:保持活力时间
ServerAliveCountMax:允许的最大会话数

授予执行权限

chmod +x /etc/rc.d/rc.local

4.2 适用于system管理的服务,如:CentOS 7 / Ubuntu 16 / Ubuntu 18

4.2.1 编写autossh自启动脚本

vim /lib/systemd/system/autossh.service

添加如下内容

[Unit]
Description=AutoSSH service
After=network.target
[Service]
Type=forking
ExecStart=/etc/autossh.local
[Install]
WantedBy=multi-user.target
Alias=autossh.service

4.2.2 编辑调用的普通脚本

vim /etc/autossh.local

添加如下内容

#!/bin/bash -e
sudo -u $user3 autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 $user2@B_ip &

4.2.3 设置开机自启动

sudo systemctl enable autossh # 加入自启动
sudo systemctl start autossh # 启动服务
sudo systemctl status autossh # 查看服务状态

参考

https://www.cnblogs.com/kwongtai/p/6903420.html

猜你喜欢

转载自blog.51cto.com/moerjinrong/2300084