マシンBからマシンCにリモートでアクセスします。
$ ssh -X t@C
$ echo $DISPLAY
localhost:10.0
$DISPLAY
Cから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転送チャネルが作成されたが、$DISPLAY
Cと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にマッピングする」とはどういう意味ですか?
明らかにgrep
Cから何かが欠けているので、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 クライアントがフォワーダに接続されていることを確認し、次に接続を転送する場所などを確認します。