stu*_*net 11 linux ssh terminal bash putty
我正在尝试构建一个 Windows 批处理文件,它以端口转发启动 putty/plink,仅此而已。到目前为止,Windows 部分已准备就绪:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Run Code Online (Sandbox Code Playgroud)
因为我不希望允许执行身份验证之后其他命令,我使用ForceCommand了Match User声明:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
Run Code Online (Sandbox Code Playgroud)
问题是,运行我的批处理文件会正确启动 putty,但在执行回显我指定的文本后它会立即关闭。
我的想法是使用这样的东西:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
Run Code Online (Sandbox Code Playgroud)
这样,putty/SSH 应该保持连接有效并且不会退出我的端口转发。
我想过像yes, pingor 之类的命令read,但它们
是否有一个命令永远不会做任何事情,直到有人用 Ctrl+C 终止它或通过关闭腻子窗口来关闭 SSH 连接?
我应该用来做waitTillControlC什么?
jll*_*gre 14
我不明白为什么所有其他回复都想在这里使用循环,睡眠能够为任何实际目的等待足够长的时间,并且不会使用任何时钟周期。
例如,它会尝试在这里沉睡 100 年,并且可能会做足够的事情来满足请求:
echo "Something"; sleep 36500d
Run Code Online (Sandbox Code Playgroud)
或者,这也应该阻止,直到您键入Enter密钥:
echo "Something"; read foo
Run Code Online (Sandbox Code Playgroud)
-N改为尝试该选项。从plink文档:
-N don't start a shell/command (SSH-2 only)
Run Code Online (Sandbox Code Playgroud)
这与sshoption 的行为相同-N,如手册页中所述:
-N Do not execute a remote command. This is useful for just for-
warding ports (protocol version 2 only).
Run Code Online (Sandbox Code Playgroud)
这应该永远休眠而不消耗任何(明显)数量的 CPU 功率。
echo "Something" && while true; do sleep 9999; done
Run Code Online (Sandbox Code Playgroud)
我也不确定你是否可以在ForceCommand子句中给出一个命令。您可能需要将命令放在 shell 脚本中。
#!/usr/bin/env bash
echo "Success! Close this window to log out." && while true; do sleep 9999; done
Run Code Online (Sandbox Code Playgroud)
这个脚本当然应该放在一个地方并且有权限,这样服务器上的普通用户就不能写入它。
Match User sampleUser
ForceCommand /usr/bin/waitforever
Run Code Online (Sandbox Code Playgroud)
我找到了一个看起来更优雅的命令:
echo "Something" && tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)
tail -f等待文件或流返回字节。(否则对于实时查看日志很有用。)/dev/null永远不会返回字节。因此该命令将永远休眠。