SSH接続を終了するにはどうすればよいですか?


245

次のようなコマンドを使用して、SSH経由でサーバーに接続し、ソケットサーバーにメッセージを送信しています。

ssh 181.169.1.2 -p 5566

接続が確立され、メッセージを書き込んで送信した後、テキストモードを終了できません。さらにテキストを入力することが許可されているだけです。

コマンドモードに戻ることができるコマンドまたはキーの組み合わせはありますか?

回答:


156

SSH接続を終了するにはどうすればよいですか?

二つの方法:

  • シェルセッションを閉じる(例:にexit続けてEnter、またはCtrl-でd通常はsshセッションを正常に終了できます)
  • 接続に問題があり、シェルが応答しない場合は、Enterキーを押してから~.、sshと入力すると、すぐに閉じてコマンドプロンプトに戻ります。

最初のオプションは直感的である必要がありますが、後者のオプションをどのように知ることができますか?

この情報は、manページを注意深く読むことで知ることができます。

$ man ssh

エスケープ文字に関する次のセクションを含むSSHドキュメントを提供します。

ESCAPE CHARACTERS
     When a pseudo-terminal has been requested, ssh supports a number of
     functions through the use of an escape character.

     A single tilde character can be sent as ~~ or by following the tilde by
     a character other than those described below.  The escape character
     must always follow a newline to be interpreted as special.  The escape
     character can be changed in configuration files using the EscapeChar
     configuration directive or on the command line by the -e option.

     The supported escapes (assuming the default ‘~’) are:

     ~.      Disconnect.

     ~^Z     Background ssh.

     ~#      List forwarded connections.

     ~&      Background ssh at logout when waiting for forwarded connection
             / X11 sessions to terminate.

     ~?      Display a list of escape characters.

     ~B      Send a BREAK to the remote system (only useful if the peer sup‐
             ports it).

     ~C      Open command line.  Currently this allows the addition of port
             forwardings using the -L, -R and -D options (see above).  It
             also allows the cancellation of existing port-forwardings with
             -KL[bind_address:]port for local, -KR[bind_address:]port for
             remote and -KD[bind_address:]port for dynamic port-forwardings.
             !command allows the user to execute a local command if the
             PermitLocalCommand option is enabled in ssh_config(5).  Basic
             help is available, using the -h option.

     ~R      Request rekeying of the connection (only useful if the peer
             supports it).

     ~V      Decrease the verbosity (LogLevel) when errors are being written
             to stderr.

     ~v      Increase the verbosity (LogLevel) when errors are being written
             to stderr.

「これをどのように知っているのか」というセクションは特に役立つとは思いません。 「切断する方法を見つけます。たとえば、どのようにして「出口」を見つけましたか?できる限りマニュアルページを確認することを再確認するのは良いことです。
アレクサンダープリチャード

@AlexanderPritchardここで行っていることをより注意深く説明するために、回答を更新しました。マニュアルページを理解するのが難しいと思う場合は、メンテナーに問題を報告するか、さらに良いことに、(不適格に良い)改善を伴うプルリクエストを提出してください。
アーロンホール

1
理論上は良いように聞こえますが、実際には、多くの人々は、必要な情報を探す方法を知っていても、コンテキストがないと想定しているため、これらのコマンドの操作方法を見つけるのに苦労しています。メンテナーに問題を報告し、改善を伴うプルリクエストを送信することは、これをさらに超えます。私はマニュアルページが有用であるとは言いませんが、もしそれらがいくつかのように見えるようにそれらが決定的に有用であれば、私はStack Exchangeを使用しません。明確にしたいのですが、あなたの答えは素晴らしいと思います。人々はマニュアルページをチェックすべきですが、それらはすべてを網羅しているわけではありません。
アレクサンダープリチャード

6
「もしそれらが見た目と同じくらい決定的に有用であれば、Stack Exchangeは使用しないでしょう。」私は同意します、そしてそれは私が良い答えを書くことを試みる理由です。参照ソースを引用して引用することは、そのソースからまだ読んでいないことでだれかが気まずくまたは悪いと感じることではありません。関連情報を保存できます。意味的に正しいことを実行していることと、それが機能していることを知りたいです。
アーロンホール

278

短い答え:タイプ exit

それでもうまくいかない場合は...

SSHエスケープ文字と切断シーケンス

ほとんどのSSH実装は、telnetのCtrl-]組み合わせと同様に、対話型セッション用のエスケープ文字を実装しています。デフォルトのSSHエスケープ文字は~で、行の先頭に入力されます。

スタックしていて、リモート側のシェルに入っexitたり入ったりCtrlDしても終了できないインタラクティブなOpenSSHセッションを終了したい場合~、ドットの後に入力できます.。入力行の先頭にエスケープ文字を確実に入力するには、最初にEnterを押す必要があります。したがって、ほとんどの場合、次のシーケンスはSSHセッションを終了します。

Enter~.

その他のエスケープシーケンス

たとえば、OpenSSHは、以外のエスケープシーケンスを提供します~.~?セッション中に入力すると、リストが表示されます。いくつかの例:

  • ~その後Ctrl-Z、セッションを中断し、
  • ~& バックグラウンドに直接配置し、
  • ~# このセッションで転送された接続のリストを提供します。
  • 単に行の先頭にチルダを入力する場合は、それを2倍にする必要があります~~

エスケープ文字は、コマンドラインオプションを使用して変更できます-e。特別な値を設定すると-e none、エスケープが無効になり、セッションは完全に透過的になります。

コマンドラインオプションの下のsshwww.openssh.orgから参照されています)のOpenBSD manページも参照してください。-e


2
無駄に複雑にすることができるのに、なぜ単純にするのですか?
MariusMatutiae

7
@MariusMatutiae OPは、exitまたはに入るリモートシェルCtrl-Dがなく、リスニングプロセスだけであるケースを要求しました。私の解決策は行き詰まって終了できないセッションに適しているとはっきりと述べた。私はこれをもっと明確にしようとしましたが、今はもっと見やすくなっていることを願っています。
ドゥブ14年

5
私は懐疑的~.でしたが、スペースがなかったことがまさに必要でした、ありがとう!:)
ジェミー

2
スイスのドイツ語キーボードレイアウトでは、AltGr + ^を押すとチルダが生成されます(さらに、ブロッキングキーです)。このため、エスケープシーケンスが機能しないようです。スイスのドイツ語でデフォルトのエスケープを入力する方法を知っている人はいますか?
ダニエルアルダー

4
@Dobu以前は機能しなかった理由を見つけました。同じ行に〜を既に入力している場合(テストしている場合は簡単に起こります)、次の〜。シーケンスは無視されます。...最初のリターンを押す必要があった
ダニエル・アルダー

32

SSHシェルを終了しますか?

入力exitしてヒットEnterするか、Ctrl+を使用しますD


1
「終了」Ctrl + DキーVNCビューア...おかげで働いていないように私を助けた
ラジのグプタ

1
これは、マシンがフリーズまたは消滅またはアプリケーションが任意の入力に応答しない場合には動作しません
ダニエル・アルダーに

11

入力するだけexitlogout(そしてもちろん、Enterキーを押す)の両方が動作します。


4

これらは、sshで遊ぶことができるさまざまなオプションを提供するサポートされているキャラクターです。

サポートされるエスケープシーケンス:

 ~.  - terminate session

 ~B  - send a BREAK to the remote system

 ~R  - Request rekey (SSH protocol 2 only)

 ~#  - list forwarded connections

 ~?  - this message

 ~~  - send the escape character by typing it twice

(エスケープは改行の直後にのみ認識されることに注意してください。)を押すと、エスケープシーケンスのリストを閉じることができますEnter



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.