Linux 中是否有一个命令可以等待它被终止?

Linux 中是否有一个命令可以等待它被终止?

我正在尝试构建一个 Windows 批处理文件,它启动带有端口转发的 putty/plink,而不执行其他任何操作。到目前为止,Windows 部分已准备就绪:

start plink.exe -ssh -i key.ppk -L 1234:localhost:80 [email protected]

由于我不想允许在身份验证后执行其他命令,因此我使用ForceCommand声明Match User

Match User sampleUser
    ForceCommand echo 'Success! Close this window to log out.'

问题是,运行我的批处理文件可以正确启动腻子,但是在执行回显我指定的文本后它会立即关闭。

我的想法是使用这样的东西:

ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC

这样,putty/SSH 应该保持连接活跃并且不会退出我的端口转发。

我想到过像 或 这样的命令yespingread它们

  • 向我的终端窗口发送垃圾邮件
  • 正在执行某些操作/产生不必要的 CPU 负载
  • 如果有人按下 Enter 键,可能会意外关闭

是否有一个命令永远不执行任何操作,直到有人使用 Ctrl+C 终止它或通过关闭 putty 窗口来关闭 SSH 连接?

我该用它做什么waitTillControlC

答案1

我不明白为什么所有其他回复都想在这里使用循环,睡眠能够等待足够长的时间以用于任何实际目的,并且不会使用任何时钟周期来执行此操作。

例如,它会尝试在这里沉睡可疑的一百年,并且无论如何都会尽力满足请求:

echo "Something"; sleep 36500d

或者,这也应该被阻止,直到您键入以下Enter命令:

echo "Something"; read foo

答案2

请尝试该-N选项。从plink文档

-N        don't start a shell/command (SSH-2 only)

这与ssh选项的行为相同-N,如手册页

-N      Do not execute a remote command.  This is useful for just for-
         warding ports (protocol version 2 only).

答案3

这应该永远处于休眠状态而不会消耗任何(明显的)CPU 能力。

echo "Something" && while true; do sleep 9999; done

我也不确定您是否可以像ForceCommand子句中那样给出命令。您可能需要将命令放在 shell 脚本中。

#!/usr/bin/env bash
echo "Success! Close this window to log out." && while true; do sleep 9999; done

这个脚本当然应该放在某个地方并具有权限,使得服务器上的普通用户无法对其进行写入。

Match User sampleUser
    ForceCommand /usr/bin/waitforever

编辑

我发现了一个看起来更优雅的命令:

echo "Something" && tail -f /dev/null

tail -f等待文件或流返回字节。(否则可用于实时查看日志。)/dev/null永远不会返回字节。因此该命令将永远处于休眠状态。

答案4

您正在尝试从错误的角度解决这个问题。您不希望 shell 不退出,而是希望 putty 让窗口保持打开状态。

http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit- 准确描述您需要更改的内容。如果您想使用“仅在干净退出时”选项,只需exit 1在 ForceCommand 末尾添加即可。

编辑:我误解了;您只想维护转发的端口,而不想保留 ForceCommand 的输出。在这种情况下,http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell做你想做的事?

相关内容