%20%E3%81%8C%E3%83%8F%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%81%AE%E3%82%92%E9%98%B2%E3%81%90%E6%96%B9%E6%B3%95.png)
シナリオ:
ssh user@host
# good connection, do some work...
# stop working, the server has some function where it automatically disconnects ...
# I come back to my cygwin window and it is unresponsive to ctrl + c/z and finally after maybe 2-5 minutes it comes back with the following error message:
Write failed: Connection reset by peer
MyLocalUsername@MyLocalComputer ~
$
# Now I can resume my cygwin session and reconnect.
私の問題は、cygwin がハングアップする様子が気に入らないことです。強制的に閉じたくありませんし、別のウィンドウを開かなければならないのも嫌です (私にとって cygwin を使用する目的は、キーボードを使い続け、ウィンドウに戻って生産性を落とさないことです。つまり、Ctrl + C で作業するか、まったくハングアップしないようにしたいのです)。
答え1
これは私の場合、Windows 8 上の Cygwin64 で動作します:
1) -e "~" で SSH 接続を開始し、エスケープ文字をチルダに設定します。これはデフォルトのエスケープ文字であるはずですが、-e オプションを使用するまで機能しませんでした。どうやら、EscapeChar ~
SSH Config でディレクティブを設定することもできるようです。
2) SSH セッションが応答しなくなったら、、、を押しますEnter。~実際.に送信するためにチルダを 2 回押す必要がある場合と、そうでない場合があります。多くの場所でそれが必要であると読みましたが、私の場合は 1 回押すだけでうまくいきました。
この回答は次の回答とそのコメントに基づいています:https://superuser.com/a/98565/10167
答え2
ssh コマンドにオプションを追加できます。次を試してください:
ssh -o ServerAliveInterval=30 ユーザー名@ホスト
これにより、ホストから切断されることが防止されます。
答え3
限られたケースに対する解決策を次に示します。切断する関数が明示的に呼び出すことが予測可能なものであり、呼び出し後に正常に終了したいだけであり、このコマンドが切断を引き起こすのに 1 秒以上かかることが分かっている場合は、 との並列呼び出しを使用できます。たとえば、コマンドが切断を引き起こすのに 1 秒以上かかることが確実な場合は、次のように呼び出すことができますnohup
。sleep
exit
nohup <slowcommand> & (sleep 1 && exit)
これにより、次のことが保証されます。
slowcommand
exit
呼び出される前に実行が開始されますslowcommand
切断が発生する前にシェルが終了します(slowcommand
切断が発生するまでに 1 秒以上かかる場合)slowcommand
呼び出しによって終了されないexit