如何终止通过 SSH 启动的命令 - SSH 连接丢失

如何终止通过 SSH 启动的命令 - SSH 连接丢失

如果我使用

timeout 10 ssh -n -o BatchMode=yes 1.1.1.1 'sleep 20' > 1.1.1.1.txt 2>&1 &

要在服务器上发出远程命令,我在 10 秒后终止 SSH 连接,然后我可以看到sleep 20该服务器仍在运行,但没有 SSH 连接。

如何在超时(例如 10 秒)后终止远程命令?

远程计算机是 AIX 6.1(或 SLES),并且没有可用于“超时”的软件包。我的客户端是Ubuntu 10.03。

答案1

假设您的远程服务器有一个兼容 POSIX 的 shell,则以下内容应该可以工作:

ssh ...options... 'command & pid=$!; sleep 20; kill $pid'

确实是POSIX标准说明$!

扩展为从当前 shell 执行的最近后台命令(请参阅列表)的十进制进程 ID。 (例如,从子shell执行的后台命令不会影响当前shell环境中“$!”的值。)对于管道,进程ID是管道中最后一个命令的进程ID。

如果远程系统有作业控制,您可以这样缩短它:

ssh ...options... 'command & sleep 20; kill %1'

答案2

如果您仍想仅使用“超时”命令来执行此操作,则您的远程执行命令(ssh)应该分配一个 tty,然后超时甚至会终止远程调用。将 ssh 命令更改为包含“-t”。

相关内容