如何停止/终止 autossh 隧道?

onk*_*ows 20 ssh

现在我有一个 autossh 隧道,阻止它的正确方法是什么?

似乎没有简单的方法可以做到这一点。这部分的文档不清楚。

简单的方法似乎是重新启动机器?这样对吗?

Mar*_*iae 27

不,正确的杀死autossh方法就是杀死进程autossh,没有别的。

原因是

# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
Run Code Online (Sandbox Code Playgroud)

autossh只是一个shell脚本,而不是一个服务。它开始一个新程序,在它的最后一行,

exec /usr/lib/autossh/autossh "$@"
Run Code Online (Sandbox Code Playgroud)

又不是服务。至于exec(您可以在 Bash 黑客wiki 中仔细检查它),它是一个 shell 内置命令,它用以下命令(/usr/lib/autossh/autossh "$@"在本例中)替换当前 shell,而无需启动新进程。因此,停止的唯一方法autossh是杀死调用脚本,例如

pkill -3 autossh
Run Code Online (Sandbox Code Playgroud)

(感谢dviljoen指出使用-3标志的重要性,见下文)。顺便说一下,终止ssh连接是行不通的,因为调用命令(上面的命令)会在意识到旧连接已被删除后立即启动一个新连接。

  • 实际上你应该在没有 -9 的情况下杀死 autossh。如果已经通过隧道建立了连接,它将产生一个子 sshd 进程来处理它。使用 -9 杀死父 autossh 将留下 sshd 进程。隧道仍将运行,直到 sshd 进程超时。如果您在 kill 上使用默认信号 (-3),它将正常关闭并带走生成的 sshd 进程。 (2认同)
  • @AndrésAlcarraz 你**真的**确定吗?`SIGTERM` 是默认值,而那个是 `15`。`SIGQUIT` 是 `3`,参见 https://superuser.com/questions/352147/what-does-kill-3-mean 和 https://en.wikipedia.org/wiki/Kill_(command) -- 另外, FWIW,我刚刚检查过,`-15` 没有关闭它,所以不能使用 `SIGTERM`。 (2认同)

小智 5

搜索过程:

ps辅助| SSH 登录

第二列是PID编号

通过PID杀死进程:)

kill -9 PID 号

如果您没有 root 权限,请使用sudo


Eri*_*rik 5

使用以下命令运行自动 ssh:

AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh

杀死它:

kill pid

顺便提一句

pkill -9 autossh 是错误的

-9确保进程没有正常退出,所以sshautossh进程被杀死时进程仍然存在

没有-9仍然很糟糕,如果您有多个隧道在运行,pkill则会将它们全部杀死

正确的方法是设置AUTOSSH_PIDFILEenv var 然后kill只设置pid