
ポート転送のみで 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 は接続を維持し、ポート転送を終了しません。
yes
、ping
またはのようなコマンドを考えました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 1
ForceCommand の最後に追加します。
編集:私は誤解していました。転送されたポートのみを保持したいのであって、ForceCommandの出力を保持したくないのですね。その場合、http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshellやりたいことをやる?