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

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

前言

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

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

1 环境

服务器类型系统主机名用户名IP说明
客户端Window 10node1本机ssh连接工具(例如:Xshell)
中转服务器ubuntu 16.04node2user28.8.8.8有广域网IP
目标服务器ubuntu 16.04node3user3172.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 $user2@8.8.8.8
说明:端口可以自定义,
  • 第一次连接时不加-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 $user3@8.8.8.8.8

输入目标服务器的密码

4 配置自启动

4.1 适用于CentOS6 和 CentOS7

输入

vim /etc/rc.d/rc.local

追加如下内容

autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 $user2@8.8.8.8

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

转载于:https://blog.51cto.com/moerjinrong/2300084

### 配置 VSCode 使用 SSH 连接公网远程服务器 #### 安装并配置 OpenSSH 为了能够通过 SSH 协议连接到远程服务器,首先需要确保本地机器上已经安装了 OpenSSH客户端[^2]。对于大多数Linux发行版和macOS系统来说,默认情况下已预装此工具;而对于Windows用户,则可以通过 Windows Subsystem for Linux (WSL) 或者直接从官方渠道下载适用于Windows平台版本。 #### 设置远程服务器端口映射(如果必要) 当目标服务器位于私有网络内部而非直接暴露于互联网时,可能需要用到内网穿透服务来建立从外部访问路径至该主机。文中提到可以利用 cpolar 工具完成这项工作[^1]。按照其文档指导设置好相应的隧道之后,就可以获得一个可被外界识别的有效IP地址及端口号组合用于后续操作。 #### 修改本机 `~/.ssh/config` 文件 创建或编辑用户的 SSH 配置文件 (`~/.ssh/config`) 来简化命令行参数输入过程: ```bash Host myRemoteServerAlias HostName public_ip_or_domain_name_of_remote_server # 替换成实际值 User your_username_on_the_remote_machine # 替换成实际用户名 Port forwarding_port # 如果不是默认22端口则需指定 ``` 上述配置允许仅通过简单的指令即可发起连接请求: ```bash ssh myRemoteServerAlias ``` #### 在 Visual Studio Code 中启用 Remote - SSH 扩展 前往VSCode插件市场搜索 "Remote - SSH" 并点击安装按钮以获取由微软官方提供的扩展程序。这一步骤完成后会自动重启IDE应用以便加载新功能模块。 #### 添加新的 SSH Target 到 VSCode 打开命令面板(`Ctrl+Shift+P`), 输入并选择 `Remote-SSH: Connect to Host...`, 接着选取之前定义好的别名 `myRemoteServerAlias`(或者是手动键入完整的连接字符串),首次执行可能会提示确认指纹信息以及询问是否保存密码/密钥位置等选项,请按实际情况作出回应。 一旦成功建立了安全通道,便会启动一个新的窗口专门针对所选中的远端环境提供交互界面支持,此时便可以在熟悉的集成开发环境中愉快地编写代码啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值