You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何正确且便捷地关闭SSH隧道?

如何正确且便捷地关闭SSH隧道?

嘿,我太懂你这种每次要查进程杀进程的麻烦了!其实你之前用Ctrl+Z是踩了个小坑——那只是把SSH进程挂到后台暂停了,并没有真正终止,所以端口才会一直被占着。给你几个更顺畅的解决方法:

  • 最直接的正确终止方式:别用Ctrl+Z,改用Ctrl+C
    当你在前台运行SSH隧道命令时,直接按下Ctrl+C就能让SSH正常退出,它会自动释放占用的12345端口,根本不用后续的kill操作。这是最省心的基础操作,下次别再用Ctrl+Z啦~

  • 如果已经不小心用了Ctrl+Z,不用急着查进程号
    你可以先输入fg命令,把刚才挂起的SSH进程调回前台,然后再按Ctrl+C就能正常终止它了,比你之前用lsof查进程再kill要省事不少。

  • 后台运行隧道,还能优雅关闭的进阶玩法
    要是你希望隧道在后台运行,又不想每次都找进程,那可以用SSH的控制套接字功能:
    启动隧道的时候加上-M -S参数指定一个套接字文件,比如:

    ssh -f -N -L 12345:some-database.rds.amazonaws.com:5432 admin@bastion.company.com -S ~/.ssh/aws_db_tunnel.sock
    

    这里-f是让SSH后台运行,-S指定了套接字文件的位置。之后要关闭隧道的时候,只需要执行:

    ssh -S ~/.ssh/aws_db_tunnel.sock -O exit admin@bastion.company.com
    

    这样就能优雅地让SSH隧道正常关闭,端口也会立刻释放,完全不用手动杀进程。

  • 用会话管理工具(适合长期运行场景)
    如果你经常需要开着隧道,偶尔切换使用,那可以用screen或者tmux这类会话工具:

    1. 先启动一个screen会话:screen -S db_tunnel
    2. 在会话里运行你的SSH隧道命令
    3. Ctrl+A+D把会话放到后台
    4. 之后想要关闭隧道的时候,输入screen -r db_tunnel回到会话,按Ctrl+C终止隧道,再输入exit关闭会话就行。
      这种方法的好处是你还能随时查看隧道的运行状态,不怕不小心关掉终端导致隧道中断。

备注:内容来源于stack exchange,提问作者Mike Christensen

火山引擎 最新活动