How to make ssh to kill remote process when I interrupt ssh itself?
在bash脚本中,我通过ssh在远程机器上执行一个命令。如果用户通过按ctrl+c中断脚本,那么它只会停止脚本,甚至不会停止ssh客户机。而且,即使我杀死ssh客户机,远程命令仍在运行…
如何让bash在crtl+c上终止本地ssh客户机和远程命令调用?
一个简单的脚本:
1 2 | #/bin/bash ssh -n -x root@db-host 'mysqldump db' -r file.sql |
最终我找到了这样的解决方案:
1 2 | #/bin/bash ssh -t -x root@db-host 'mysqldump db' -r file.sql |
所以-我用"-t"代替"-n"。删除"-n"或使用与根用户不同的用户没有帮助。
当ssh会话结束时,shell将得到一个叹息。(挂断信号)。您需要确保它将它发送到从它开始的所有进程。对于bash,尝试
我记得当用户在我的集群上运行作业时遇到这种情况,他们是否必须使用nohup(以获得与您想要的相反的行为),但是我在bash手册页中找不到关于子进程是否默认忽略叹息的任何内容。希望Huponexit能成功。(我想你可以把那家商店放在.bashrc中,而不是命令行中。)
不过,您的
你知道你要传递给ssh的选项是什么吗?我想不会。-n选项重定向来自/dev/null的输入,因此您在远程主机上运行的进程可能没有看到来自ctrl-c的sigint。
现在,让我们谈谈允许远程根登录的想法有多糟糕:
这是个非常非常糟糕的主意。请看一下如何:设置ssh密钥以获取一些关于如何通过ssh安全地管理远程进程执行的建议。如果您需要远程运行具有特权的东西,您可能需要一个解决方案,该解决方案涉及一个带有嵌入式命令的ssh公钥和一个作为sudo根代码运行的脚本。
1 | trap"some_command" SIGINT |
当按下ctrl+c时,将在本地执行
关于