Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 如何在bash脚本退出时终止ssh tunnel子进程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个bash脚本创建ssh隧道来安全地连接远程 mysql服务器,如下所示. ssh -f -N -L $LOCAL_PORT:localhost:3306 $REMOTE_USER@$REMOTE_IP mysql -P $LOCAL_PORT -h 127.0.0.1 -u lapl_stg -p${REMOTE_DB_PASS} < ./t1.sql > ./out.txt 在bash
我有一个bash脚本创建ssh隧道来安全地连接远程 mysql服务器,如下所示.

ssh -f -N -L  $LOCAL_PORT:localhost:3306 $REMOTE_USER@$REMOTE_IP
MysqL -P $LOCAL_PORT -h 127.0.0.1 -u lapl_stg -p${REMOTE_DB_PASS} < ./t1.sql > ./out.txt

在bash脚本中打开ssh隧道后,在退出bash脚本后,我注意到ssh隧道子进程仍处于活动状态.

脚本退出后,如果您执行netstat,则会显示如下.

netstat -a -n -p -l
(Not all processes Could be identified,non-owned process info
 will not be shown,you would have to be root to see it all.)
ActivE internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:3308          0.0.0.0:*               LISTEN      6402/ssh        
tcp        0      0 10.44.44.11:46836       10.44.44.21:22          ESTABLISHED 6402/ssh        
tcP6       0      0 ::1:3308                :::*                    LISTEN      6402/ssh

如何优雅地终止ssh子进程(6402)以清理脚本?我想过使用’killall ssh’,但它可能会意外杀死其他人创建的其他ssh进程.

谢谢.

解决方法

我找到了一种在SSH中使用控制套接字来实现此目的的方法.基本上:

ssh  -M -f -N -L  $LOCAL_PORT:localhost:3306 $REMOTE_USER@$REMOTE_IP -S /tmp/ssh-control
MysqL -P $LOCAL_PORT -h 127.0.0.1 -u lapl_stg -p${REMOTE_DB_PASS} < ./t1.sql > ./out.txt
ssh -S /tmp/ssh-control -O exit $REMOTE_IP

在脚本退出时进程未被杀死的原因是-f传递给ssh将其分配给后台.这需要SSH隧道在不中断下一行执行的情况下工作.

大佬总结

以上是大佬教程为你收集整理的linux – 如何在bash脚本退出时终止ssh tunnel子进程全部内容,希望文章能够帮你解决linux – 如何在bash脚本退出时终止ssh tunnel子进程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。