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.'

問題是,運行我的批次檔可以正確啟動 putty,但它在執行回顯我指定的文字後立即關閉。

我的想法是使用這樣的東西:

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

這樣,putty/SSH 應該保持連線處於活動狀態並且不會退出我的連接埠轉送。

我想過像yes,ping或 之類的命令read,但是它們

  • 正在向我的終端機視窗發送垃圾郵件
  • 實際上正在做一些事情/產生不必要的 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做你想做的事?

相關內容