`ssh -X`の後で `$DISPLAY`でマッピングを見つける方法は?

`ssh -X`の後で `$DISPLAY`でマッピングを見つける方法は?

マシンBからマシンCにリモートでアクセスします。

$ ssh -X t@C
$ echo $DISPLAY
localhost:10.0

$DISPLAYCからBへのマッピングを見つけて確認する方法は$DISPLAY? Cで次のコマンドで実行できますか?

$ netstat -a | grep 6010
tcp        0      0 localhost:6010          0.0.0.0:*               LISTEN     
tcp6       0      0 ip6-localhost:6010      [::]:*                  LISTEN 

X転送チャネルが作成されたが、$DISPLAYCとB LISTENの間の接続が確立されないのはなぜですか?$DISPLAY

CでXクライアントを実行すると、B(ローカルコンピュータ)のXサーバーに接続されていることをどのように確認できますか? X クライアントを実行する前よりも下でポート 6010 に関する詳細情報を取得できるのはなぜですか。

$ eog &
[1] 1129
$ netstat -a | grep 6010
tcp        0      0 localhost:6010          0.0.0.0:*               LISTEN     
tcp        0      0 localhost:59782         localhost:6010          TIME_WAIT  
tcp        0      0 localhost:59780         localhost:6010          ESTABLISHED
tcp        0      0 localhost:59778         localhost:6010          TIME_WAIT  
tcp        0      0 localhost:6010          localhost:59780         ESTABLISHED
tcp6       0      0 ip6-localhost:6010      [::]:*                  LISTEN

ありがとうございます。

答え1

「Cの$ DISPLAYをBの$ DISPLAYにマッピングする」とはどういう意味ですか?

明らかにgrepCから何かが欠けているので、Cでは「ポート番号= 6010」に関連するソケットのみを見ることができます。 Cの他の接続またはリスニングソケットが切断されましたgrep

以前は実行中のXクライアントがなく、sshd(ポート番号= 6010)に接続していたため、どの接続も表示できませんでした。その後、Xクライアントが実行され、sshd(ポート番号= 6010)に接続されているため、より多くの情報を表示できます。番号=6010)。

SSHトンネルを使用している場合は、ネットワークトポロジを理解する必要があります。 BのSSHクライアントはこれを要求するため、CのSSHサーバーはポート6010でリッスンする新しいソケットを開きます。 B の SSH クライアントと C の SSH サーバーの間にはまだ SSH トンネルが確立されています (特殊構成に sshd が存在しない場合はポート番号 = 22)、終了した後grepはこのトンネル接続を表示できません。 CのXクライアントはsshd(ポート番号= 6010)に接続し、sshdはSSHトンネルを使用してこれらの接続を多重化し、それをBのXサーバーに転送します。

「Cの$ DISPLAYとBの$ DISPLAYの間の接続」は実際には存在せず、SSHトンネルはC:22とaddress_of_the_SSH_client_on_Bの間に生成されます。そして接続なので、LISTENING状態では不可能です。

より多くの情報を表示するには、netstat -ap使用しないでください。grep

この回答で言及されているすべての接続は、エンドユーザーの視点の「接続」ではなく、カーネルの観点からの実際のTCP接続を意味します。

答え2

これでX転送チャネルが作成されましたが、Cの$ DISPLAYとB LISTENの$ DISPLAYの間の接続が確立されていないのはなぜですか?

X 転送チャネルはまだ作成されていません。クライアントが6010(リモート)システムのポートに接続したときにのみ生成されます。C接続は別々のチャネルに転送されます。渡すssh接続(Cと他のTCP接続を介していないB)SSH接続を介して転送されたすべてのチャネルを表示するには、行の先頭~#にエスケープ文字を使用する必要があります。

$ ssh -X localhost
$ ~#
The following connections are open:
  #0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
$ netstat | grep 6010

$ xterm &
$ ~#
The following connections are open:
  #0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
  #1 x11 (t4 r3 i0/0 o0/0 fd 8/8 cc -1)
$ netstat | grep 6010
tcp6       0      0 localhost:6010          localhost:39698         ESTABLISHED
tcp6       0      0 localhost:39698         localhost:6010          ESTABLISHED

CでXクライアントを実行すると、B(ローカルコンピュータ)のXサーバーに接続されていることをどのように確認できますか?

私はこれを確かめることができる直接方法を知らない。 X11サーバーが稼働しているシステムを返すX11コアプロトコルまたは拡張要求についてはわかりません。この手順を段階的に実行する必要があります。まず、X11 クライアントがフォワーダに接続されていることを確認し、次に接続を転送する場所などを確認します。

関連情報