【SSH端口转发:实现安全的远程端口映射】

SSH端口转发:实现安全的远程端口映射

在网络应用开发和运维过程中,我们经常需要进行端口转发来实现各种网络访问需求。今天我要分享一个使用SSH进行端口转发的实用脚本,并详细讲解其工作原理。

脚本内容

  • 免密
    ssh-copy-id -p 20080 root@xxxx.com
export ssh_local_port=50001
export ssh_remote_port=80
export ssh_cmd="root@xxxx.com -p 20080"
export ssh_process="(autossh|ssh.*$ssh_local_port)"# 终止已存在的SSH转发进程
ps -ef|grep -E $ssh_process | awk '{print $2}' | xargs kill -9# 建立SSH端口转发
ssh -fN -L 0.0.0.0:$ssh_local_port:127.0.0.1:$ssh_remote_port \
-o "ServerAliveInterval=60" \
-o "ServerAliveCountMax=3000000" \
$ssh_cmd# 检查进程状态
ps -ef|grep -E $ssh_process

脚本详解

1. 配置参数

  • ssh_local_port: 本地监听端口(50001)
  • ssh_remote_port: 远程目标端口(80)
  • ssh_cmd: SSH连接信息,包含用户名、服务器地址和SSH端口
  • ssh_process: 用于匹配SSH进程的正则表达式

2. 核心功能

清理已有连接
ps -ef|grep -E $ssh_process | awk '{print $2}' | xargs kill -9

这行命令会查找并终止所有相关的SSH转发进程,确保不会有端口冲突。

建立端口转发
ssh -fN -L 0.0.0.0:$ssh_local_port:127.0.0.1:$ssh_remote_port

参数说明:

  • -f: 后台运行
  • -N: 不执行远程命令
  • -L: 进行本地端口转发
  • 0.0.0.0:$ssh_local_port: 在本地所有网卡上监听
  • 127.0.0.1:$ssh_remote_port: 转发到远程主机的目标端口
保持连接
-o "ServerAliveInterval=60"
-o "ServerAliveCountMax=3000000"

这两个参数用于保持SSH连接的稳定性:

  • ServerAliveInterval: 每60秒发送一次心跳包
  • ServerAliveCountMax: 最大心跳包重试次数

使用场景

  1. 内网服务暴露:将内网服务安全地暴露到外网
  2. 远程调试:开发人员需要访问远程服务器上的服务
  3. 安全访问:通过SSH加密通道访问远程服务
  4. 负载均衡:将流量转发到不同的后端服务器

安全建议

  1. 使用强密码或SSH密钥认证
  2. 限制本地监听地址(如需要的话)
  3. 定期更新SSH版本
  4. 监控异常连接情况

故障排查

如果端口转发不成功,可以检查:

  1. 确保本地端口未被占用
  2. 验证SSH连接权限
  3. 检查远程服务是否正常运行
  4. 查看系统日志寻找错误信息

总结

SSH端口转发是一个强大的网络工具,通过本文介绍的脚本,我们可以快速建立一个安全的端口转发通道。这个脚本不仅实现了基本的端口转发功能,还包含了自动清理、保活等实用特性,适合在生产环境中使用。

脚本封装

cat << 'EOF' >> ~/tunnel_forward.sh
# SSH端口转发管理函数
# 用法: tunnel_forward <本地端口> <远程端口> <SSH连接命令>
function tunnel_forward() {# 检查参数数量if [ $# -ne 3 ]; thenecho "用法: bash ~/tunnel_forward.sh <本地端口> <远程端口> <SSH连接命令>"echo "例如: bash ~/tunnel_forward.sh 3306 3306 \"user@remote-server -p 22\""return 1fi# 设置参数local ssh_local_port=$1local ssh_remote_port=$2local ssh_cmd=$3if ! command -v autossh &> /dev/null; thenecho "请先安装autossh: "echo "Ubuntu/Debian: sudo apt-get install autossh"echo "CentOS/RHEL: sudo yum install autossh"return 1fi# 定义进程匹配模式local ssh_process="(ssh.*$ssh_local_port)"# 关闭已存在的SSH隧道进程local existing_process=$(ps -ef|grep -E $ssh_process | awk '{print $2}')if [ ! -z "$existing_process" ]; thenecho "关闭已存在的SSH隧道进程..."ps -ef|grep -E $ssh_process | awk '{print $2}' | xargs kill -9 2>/dev/nullfi# 设置autossh环境变量export AUTOSSH_POLL=60export AUTOSSH_FIRST_POLL=30export AUTOSSH_GATETIME=0export AUTOSSH_DEBUG=1# 建立新的SSH隧道echo "建立新的SSH隧道..."autossh -M 0  -fN -L 0.0.0.0:$ssh_local_port:127.0.0.1:$ssh_remote_port \-o "ServerAliveInterval=30" \-o "ServerAliveCountMax=3" \-o "ExitOnForwardFailure=yes" \-o "StrictHostKeyChecking=no" \$ssh_cmd# 显示当前SSH隧道进程echo "当前SSH隧道进程:"ps -ef|grep -E $ssh_process
}# 执行函数
tunnel_forward "$1" "$2" "$3"
# bash ~/tunnel_forward.sh 50000 80 "root@xxxx -p 22" >> ~/.tunnel_forward.log 2>&1EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简述mysql 主从复制原理及其工作过程,配置一主两从并验证

第一种基于binlog的主从同步 首先对主库进行配置&#xff1a; [rootopenEuler-1 ~]# vim /etc/my.cnf 启动服务 [rootopenEuler-1 ~]# systemctl enable --now mysqld 主库的配置 从库的配置 第一个从库 [rootopenEuler-1 ~]# vim /etc/my.cnf [rootopenEuler-1 ~]# sys…

Spring自定义BeanPostProcessor实现bean的代理Java动态代理知识

上文&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145241149 中大致了解了spring aop的代理的实现&#xff0c;其实就是有个BeanPostProcessor代理了bean对象。顺便复习下java代理相关知识 目录 自定义BeanPostProcessor实现aopJava动态代理知识动态代理的几…

医院挂号就诊系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…

【GORM】初探gorm模型,字段标签与go案例

GORM是什么&#xff1f; GORM 是一个Go 语言 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它让我们可以使用结构体来操作数据库&#xff0c;而无需编写SQL 语句 GORM 模型与字段标签详解 在 GORM 中&#xff0c;模型是数据库表的抽象表示&#xff0c;字段标签&am…

R 语言科研绘图第 20 期 --- 箱线图-配对

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

【物联网】ARM核介绍

文章目录 一、芯片产业链1. CPU核(1)ARM(2)MIPS(3)PowerPc(4)Intel(5)RISC-V 2. SOC芯片(1)主流厂家(2)产品解决方案 3. 产品 二、ARM核发展1. 不同架构的特点分析(1)VFP(2)Jazelle(3)Thumb(4)TrustZone(5)SIMD(6)NEON 三、ARM核(ARMv7)工作模式1. 权限级别(privilege level)2.…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推&#xff0c;SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…

JS宏进阶: 工厂函数与构造函数

一、构造函数 在JavaScript中&#xff0c;构造函数是一种用于创建和初始化对象的特殊函数。构造函数的名字通常以大写字母开头&#xff0c;以区分于普通函数。通过new关键字调用构造函数&#xff0c;可以创建一个新的实例对象&#xff0c;并自动执行构造函数内部的代码来初始化…

03_UI自适应

因为Canvas大小是始终和屏幕一致的 所以设置Canvas的屏幕大小 通常设置为1920 * 1080 又因为屏幕的图像及按钮如果想适配各种显示屏需要锁定长或者宽&#xff0c; 之后利用钉子将其他图像利用创建空节点定在左右或者上下两侧 比如unity编辑器通常是锁定宽的&#xff0c;那我…

网络安全——常用语及linux系统

一、网络安全概念及法规 网络安全&#xff1a;网络空间安全 cyber security 信息系统&#xff1a;由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的已处理信息流为目的的人机一体化系统 信息系统安全三要素&#xff08;CIA&#xff09; 保密…

算法日记6.StarryCoding P52:我们都需要0(异或)

一、题目 二、题解&#xff1a; 1、对于这道题&#xff0c;题意为让我们寻找一个数x使得 b[i]a[i]^x&#xff0c; 并且b[1]^b[2]^b[3]^ b[4]^b[5]....0 2、我们把b[i]给拆开&#xff0c;可以得到 3、又因为^满足结合律&#xff0c;因此&#xff0c;可以把括号给拆开 4、接着…

提问:玩游戏输入法总弹出来咋回事哎

玩游戏时输入法总弹出来的问题&#xff0c;通常与电脑的输入法设置、操作系统配置以及游戏程序的兼容性有关。以下是一些常见的解决方法&#xff1a; 一、修改输入法快捷键 禁用不必要的输入法&#xff1a; 在系统的语言设置中&#xff0c;暂时禁用非活动的输入法&#xff0c;…

通过内核模块按fd强制tcp的quickack方法

一、背景 tcp的quickack功能是为了让ack迅速回发&#xff0c;快速响应&#xff0c;减少网络通讯时延&#xff0c;属于一个优化项&#xff0c;但是tcp的quickack是有配额限制的&#xff0c;配置是16个quick&#xff0c;也就是短时间内quickack了16次以后&#xff0c;这个配额为…

csp22前2题

一幅长宽分别为 nn 个像素和 mm 个像素的灰度图像可以表示为一个 nmnm 大小的矩阵 AA。 其中每个元素 AijAij&#xff08;0≤i<n0≤i<n、0≤j<m0≤j<m&#xff09;是一个 [0,L)[0,L) 范围内的整数&#xff0c;表示对应位置像素的灰度值。 具体来说&#xff0c;一…

《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车与驾驶维修》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第二批认定学术期刊。 问&#xff1a;《汽车与驾驶维修》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;中国机械工业联合会…

web前端1--基础

&#xff08;时隔数月我又来写笔记啦~&#xff09; 1、下载vscode 1、官网下载&#xff1a;Visual Studio Code - Code Editing. Redefined 2、步骤&#xff1a; 1、点击同意 一直下一步 勾一个创建桌面快捷方式 在一直下一步 2、在桌面新建文件夹 拖到vscode图标上 打开v…

vue 学习笔记 - 创建第一个项目 idea

1、安装Vue CLI 查看npm版本号 &#xff08;可跳过&#xff09; % npm -v 11.0.0安装Vue CLI % npm install -g vue/cli2、创建项目 进入工程文件目录 % cd /Users/ruizhifeng/work/aina-client查看vue 版本号 &#xff08;可跳过&#xff09; % vue --version vue/cli 5…

网络安全---CMS指纹信息实战

CMS简介 CMS&#xff08;Content Management System&#xff09;指的是内容管理系统&#xff0c;如WordPress、Joomla等。CMS系统非常常见&#xff0c;几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多&#xff0c;因此黑客将不断尝试利用这些漏洞攻击CMS…

基于SSM的自助购药小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

anaconda安装和环境配置

文章目录 一、Anaconda下载1.从官网直接下载&#xff1a;2.从镜像站中下载&#xff1a; 二、Anaconda安装三、检测是否有Anaconda配置anaconda环境 四、 Anaconda创建多个python环境&#xff08;方便管理项目环境&#xff09;1.查看conda有哪些环境2.创建python3.6的环境3.激活…