1つのコマンドですべてのSSH接続を終了し、PuTTYを閉じます


18

すべてのSSH接続をバッ​​クアウトし、「ワンショット」でPuTTYを閉じる方法はありますか?私はWindows 7で働いており、PuTTYを使用してさまざまなLinuxホストにSSHで接続しています。

私が自分自身を働かせている方法の例:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

上記のように、host8からPuTTYを一度に閉じる方法はありますか?場合によっては、最大5または10ホストまでのホストを見つけます。XをクリックしてPuTTYウィンドウを閉じることができますが、exitコマンドを使用してSSH接続が適切に閉じられるようにしたいと思います。また、怠を増やす方法に関するヒントを求めていることに気づきました。私はそれを「どうすればもっと効率的にできるか」と書き留めます。


6
直接質問するのではなく、ctrl+d複数回押すだけではどうですか?
ウルリッヒダンゲル

@UlrichDangelこれは以前に使用したことはありませんが、接続をすばやくバックアウトする簡単な方法でもあります。
バンジャー

2
あなたは本当に5から10レベルの深さのSSHセッションをネストしていますか?それらがすべてのホストを介してsshセッションのすべてのパケットをバウンスする複雑なトンネルを作成していることに気付いていますか?sshセッションをネストしないだけで問題を解決できますか?
jw013

@ jw013いいえ、私はそれを理解していませんでしたが、理にかなっています。正直なところ、5〜10レベルは誇張でしたが、「パテから一気に抜け出す方法」という私の質問を説明しようとしていました。
バンジャー

回答:


29

ssh接続終了エスケープシーケンスを使用してみてください。

ではsshセッション、入力します~.(ドットチルダ)。入力しても文字は表示されませんが、セッションはすぐに終了します。

$ ~.
$ Connection to me.myhost.com closed.  

から man 1 ssh

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 for SSH protocol
         version 2 and if the peer supports 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 remote port-forwardings using 
         -KR[bind_address:]port.  !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 for SSH protocol 
         version 2 and if the peer supports it).

かなりクール!~.エイリアスまたは関数に入れる方法はありますか?のように覚えやすい名前を付けるだけexitallです。今、私はあまりにも多くの方法を求めています:)。私はいくつかのことを試しました~/.bashrcが、取得し-bash: ~.: command not foundます。bashは、キーボードから直接来るエスケープシーケンスではなく、文字列としてそれを見ると思います。
バンジャー

私もctrl+dソリューションが好きですが、これは私の質問にもっと直接答えます。皆さんありがとう。
バンジャー

3
@Banjer bashは決して認識せず~.、それssh自体で処理されます。
ジル「SO-悪であるのをやめる」

@Gilles gotcha、理にかなっています。
バンジャー

また、PuTTYがこれを行うという保証はありません。CLI sshクライアントはCLIであるため、この手法が必要です。PuTTYはGUIアプリケーションであり、GUIでこのようなことを行うためのはるかにユーザーフレンドリーな方法があります。
アレクシオス

11

を押すCtrlDと、Ctrlキーを押したままログアウトし、ウィンドウが消えるまで「d」を押します。


1
悲しいことに、これは万能ではありません。エディターまたは他のフルスクリーンツールを実行しているセッションは無視される可能性がありEOTます。そしてbash、コマンドラインの途中でそれを無視します。自分で試してみてください。1文字入力してを試してくださいCtrl-D
Alexios

Ctrl + Dは何をするのですか、安全に存在するのですか、それともプロセスを強制終了するのですか?
-AMB

安全に終了します。これは、「exit」と入力してEnterキーを押すのと同じシェルショートカットです。
ジョー

実際に私のもの(windows git bash&ubuntu bash)を発行しlogoutます。
ヴェリス

はい、ssh接続はログインセッションではない傾向があるため、exitもログアウトを呼び出すと考えています。
ジョー


2

もう一つの方法は作ることですfunctionのためにssh

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

残念ながら、リモートシステムでの作業が終了すると、常に接続が閉じられ、コンソールからログアウトされます。

すべてのサーバーでこのような機能を作成する必要があることに注意してください。そうしないと、このハックは機能しません。ところで、関数はいつでも〜/ .bashrcまたは〜/ .whatever_shell_you_use_rcに入れることができます。

他の方法と比較すると、少し汚いハックに見えます。


functionはPOSIXではありません-キーワードを削除するだけで、$@適切に引用する必要があります。そうしないと、単語分割後に引数が渡されます(不良)。
クリスダウン

2

または、別のホストにジャンプするときにexecシェルプロセスを置き換えるために使用できますssh

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

5レベルの深さは、トラフィックが他のすべてのサーバーを通過するため、きれいではありません。そのため、PuTTYまたはssh(〜。)を強制終了することはお勧めしません。これは(何をするかにもよりますが)サーバー上で孤立プロセスを引き起こす可能性があるためです。

試してみて、より「怠 "」にならないようにしてください。パテのタイトルバーを右クリックすると、新しいセッションをすばやく開くことができます。「デフォルト」サーバーがあり、そのサーバーからのジャンプを1つ受け入れる場合、「セッションの複製」機能は非常に便利です。特にpubkey認証を使用する場合。


2

ちょっとしたスクリプティングをしてもかまわないなら、これを行うことができます。

スクリプト:myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

dotコマンドを介して呼び出します。

$ . myssh user@server.com

1つのレベルを終了する場合:

$ exit

すべて終了する場合:

$ exit 5

もちろん、これをsshを使用するすべてのコンピューターにコピーする必要があります。また、sshというシェル関数を定義する方が簡単ではないでしょうか?これにより、先行期間などが回避されます。
etherfish14年

-1

パテ端末ウィンドウでログアウトを入力すると、私のためにそれを行います:

richard@forevermore:~ > logout

ssh接続を閉じて、Puttyアプリケーションを終了します。


質問を正しく読んでいないと思います。OPはを実行しssh host1、次にfrom host1を実行しssh host8ます。その時点で、a logoutexit既に知っているコマンドと同じことを行います-を終了し、にhost8戻しhost1ます。
G-Manが「Reinstate Monica」と言う

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