ネストされたsshにいるかどうかを知る方法は?

Aug 21 2020

ネストされたSSHセッションに参加しているかどうかを確認する方法があるかどうか、またその数を知りたいのですが。

たとえば、From host2 ssh user1@host1、from host1 ssh user1@host2host1になりますが、実際には終了してhost2に移動できます。

もちろんexitコマンド以外に、(ネストされたsshセッションで)そのような状況にあることをどのように知ることができますか?

回答

2 KamilMaciorowski Aug 21 2020 at 13:09

すべてのSSHクライアントがこれをサポートしているわけではないため、完全なソリューションではありません。これらは別の方法で構成できます。それでも…

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

エスケープ文字

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

単一のチルダ文字は~~、以下に説明する以外の文字によって、またはチルダの後に送信することができます。エスケープ文字は、特殊として解釈されるために常に改行に従う必要があります。エスケープ文字は、EscapeChar構成ディレクティブを使用して構成ファイルで変更するか、-eオプションでコマンドラインで変更できます。

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

[…]

~^Z
背景ssh

[…]

~C
コマンドラインを開きます。[…]でオプションが有効になっている!command場合、ユーザーはローカルコマンドを実行PermitLocalCommandできますssh_config(5)-hオプションを使用して、基本的なヘルプを利用できます。

[…]

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

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

、を送信しEnter~次にCtrl+を送信することで、それらのいずれかをバックグラウンドで処理できますZ。これは、あなたが(どこから来たあなたが調べることができ、それぞれのシェルであなたを配置しますenv | grep ^SSH_(あなたは)、 uname -ahostname...、)、バックグラウンドにコマンドが(何jobs)。fg接続を取り戻すために実行します。何ができるかは、シェルとそれぞれをどのように実行したかによって異なりますssh。詳しくは説明しません。

ssh接続に関する基本的な情報を出力するエスケープ関数があれば便利です(と同様~#)。そのような機能は(まだ)ないようです。

~CCここでは首都C、意味Shift+をC)して!command、あなたはいずれかを送信せずに調査することができるかもしれssh背景に。のデフォルト値PermitLocalCommandはno。であることに注意してください。接続が確立された後は変更できないので、事前に考えてください。