Linux には終了するまで待機するコマンドはありますか?

Linux には終了するまで待機するコマンドはありますか?

ポート転送のみで putty/plink を起動する Windows バッチ ファイルを作成しようとしています。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 は接続を維持し、ポート転送を終了しません。

yespingまたはのようなコマンドを考えましたreadが、

  • 私のターミナルウィンドウにスパムが流れている
  • 実際に何かを実行している / 不要なCPU負荷を生成している
  • 誰かがEnterキーを押すと予期せず終了する可能性があります

誰かが Ctrl+C で終了するか、PuTTY ウィンドウを閉じて SSH 接続を閉じるまで、永久に何も実行しないコマンドはありますか?

何に使用すればいいですかwaitTillControlC?

答え1

他のすべての返信がここでループを使用したい理由がわかりません。スリープは実用的な目的に十分な長さ待機することができ、クロック サイクルを使用しません。

たとえば、ここでは疑わしい 100 年間スリープしようとしますが、いずれにしても要求に応じるには十分な期間スリープする可能性が高いです。

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。コマンドをシェル スクリプトに記述する必要があるかもしれません。

#!/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

あなたは間違った方向からこの問題を解決しようとしています。シェルが終了しないようにしたいのではなく、PuTTY がウィンドウを開いたままにしておくことを望んでいます。

http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit- 変更する必要がある内容を正確に記述します。「クリーン終了時のみ」オプションを使用する場合は、exit 1ForceCommand の最後に追加します。

編集:私は誤解していました。転送されたポートのみを保持したいのであって、ForceCommandの出力を保持したくないのですね。その場合、http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshellやりたいことをやる?

関連情報