ネストされたSSHにいるかどうかはどうすればわかりますか?

ネストされたSSHにいるかどうかはどうすればわかりますか?

入れ子になったSSHセッションにいるのか、そしてそのうちのいくつがあるのか​​を調べる方法があるかどうかを知りたいです。

例えば、ホスト2 ssh user1@host1それからホスト1 ssh user1@host2ついにホスト1しかし、実際には終了することができますホスト2

もちろん、シャットダウンコマンドではなく、この状況(ネストされたSSHセッション)にあるかどうかはどうすればわかりますか?

ベストアンサー1

すべてのSSHクライアントがこの機能をサポートしているわけではなく、異なる構成になる可能性があるため、これは完璧なソリューションではありません。まだ…

sshOpenSSHは以下をサポートします:

エスケープ文字

疑似端末を要求すると、sshエスケープ文字を使用して多くの機能がサポートされます。

1つのチルダ文字を~~チルダ文字として送信することも、チルダ文字の後に後述の文字以外の文字を送信することもできます。特殊文字として解釈されるには、エスケープ文字は常に改行文字の後に続く必要があります。エスケープ文字は、EscapeChar設定ディレクティブを使用して設定ファイルまたはオプションを使用してコマンドラインから変更できます-e

サポートされているエスケープ(デフォルトは仮定~)は次のとおりです。

[… ]

~^Z
背景ssh

[… ]

~C
コマンドラインを開きます。 [...]このオプションがで有効になっていると、!commandユーザーはローカルコマンドを実行できます。基本的なヘルプについては、このオプションを使用してください。PermitLocalCommandssh_config(5)-h

[… ]

接続されているすべてのSSHクライアントがこの機能をサポートし、疑似端末が要求されていると仮定すると、現在のコマンドラインに実際のチルダが表示される前に「使用されている」チルダ文字の数を観察して、接続数を知ることができます。特殊文字として解釈するには、チルダ文字が常に改行文字の後に来る必要があることに注意してください。私のテストでは、各接続は1つのエスケープ文字を使用します。

たとえば、画面に表示するために4回をEnter送信する必要がある場合、これは3つのリンク接続があることを意味します。~~

Enterその金額を送信して~から+を送信すると、Ctrlこれらの背景を指定できますZ。これにより、どこから来たのか(env | grep ^SSH_)、現在の場所(uname -a、、hostname...)、および背景コマンドが何であるか(jobs)を調べることができる適切なシェルに移動します。fg接続を復元するには実行してください。実行できる操作は、シェルとそれに応じて実行する方法によって異なりますので、ssh詳細については説明しません。

ssh接続に関する基本情報を印刷できるエスケープ機能(~#例:まだそのような機能はないようです。

~CCここでは大文字C、Shift+ C)を使用すると、バックグラウンドで何も送信せずに調べること!commandができます。sshデフォルト値を参照してください。PermitLocalCommandはいno。 AFAIK接続が確立された後は変更できませんので、あらかじめ考えてください。

おすすめ記事