关闭ssh隧道的几种“优雅”方式

由于工作原因,需要通过ssh隧道去实现远程操作或转发命令的效果,但当把隧道转入后台运行后,发现很难再把这个ssh连接找出来,找到大多数方法都是把进程强行匹配 kill 掉。最后看了一下国外的大神,找到一个相对优雅一点办法,分享一下

网络环境

为了让文章更容易看懂,先初定一个网络环境,用法都是一样的,这个也能在很多情况下用,不同网络环境各位自己灵活变化一下就行。
在这里插入图片描述
主机A和远端服务器D不能直接通信,可以通过ssh隧道的方法,把远端服务器某服务端口(比如ssh服务端口为22,数据库服务端口3306等)转发映射到转发服务器B上(比如服务器D的22端口转发到服务器B的7000端口上,主机就可以通过连接B的7000端口直接连接到D的22端口上从而实现连接),具体技术请自行搜索ssh隧道,本篇重点不在这里。

重点,ssh连接建立后放在后台运行了,如何关闭?先直接上新办法,后面有旧方法介绍(没有哪个方法比哪个方法优秀,能达到目的就是好办法)

方法一(通过文件进行通道管理,本质上文件为socket文件)

先上大佬的方法,具体命令和解析在后面

在这里插入图片描述
在这里插入图片描述

简单解析一下:

主要参数:
  <-M> master Mode的介绍具体可用man看,我怕对这个理解有误,减少误导
  <-S> 指向一个文件< path-to-socket >(这个文件名字路径和命名可以自定义,只要用户有权限就可以在连接时可以自己创建),本质上是socket文件,本意上是给其他进程用到同一个ssh连接时使用,可以使用这个对断开进行控制。

次要:不同网络环境按需添加
  <-L> or <-R> L和R分对应正向代理和反向代理。在上方网络环境中:
    通过服务器B配置转发为正向代理,用户名和用户IP指向服务器C,服务器C需开启sshd服务。
    通过服务器C配置转发为反向代理,用户名和用户IP指向服务器B,服务器B需开启sshd服务,并配置参数GatewayPorts yes已监听所有IP(不配置好像只能监听127.0.0.1)。
  <-C> 压缩传输
  <-f> 该ssh连接后台运行
  <-N> 静默连接
  <-g> 允许远程主机连接用于转发的端口

ssh -CfNg -M -S <path-to-socket> -R <监听IP(服务器B)>:<监听端口号(B)>:<最终目标IP(D)>:<最终目标端口号(D)> (另一个转发服务器)用户名@(另一个转发服务器)IP

以这种方式连接后就可以通过指定的socket文件进行断开该ssh连接:

ssh -S <path-to-socket> -O exit (转发服务器)IP

方法二(通过进程找pid杀掉进程)

这个方法最好保留创建ssh连接命令,也可以通过其他字段查找

ps -aux | grep -v "grep" | grep "<创建ssh连接的命令>" | kill `awk '{print $2}'`

举例如下:
在这里插入图片描述

方法三(只在监听端口的服务器上有效,通过网络服务找pid杀掉进程)

正向代理:

netstat -anp | grep 222.111.112.2:22 | awk '{print substr($7,0,length($7)-4)}' | kill `awk '{print}'`

举例如下:(可以精准找出pid)
在这里插入图片描述

反向代理:

netstat -anp | grep <:端口号> | awk '{print substr($7,0,length($7)-6)}' | kill `awk '{print}'`

举例如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值