Ssh

如何在 ssh -X 之後找到$DISPLAY 上的映射?

  • March 15, 2019

在機器B上,我遠端訪問機器C

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

如何找到/驗證$DISPLAYC 上到$DISPLAYB 上的映射?可以通過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 伺服器?為什麼我在下面得到的關於埠 6010 的資訊比執行 X 客戶端之前更多?

$ 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

謝謝。

“的映射 $ DISPLAY on C to $ 在 B 上顯示”是什麼意思?

顯然你grep在 C 上沒有什麼東西,所以你只能在 C 上看到涉及“埠號 = 6010”的套接字。C 上的其他連接或偵聽套接字已斷開grep

您之前沒有看到任何連接,因為沒有任何 X 客戶端正在執行並連接到 sshd(埠號=6010),之後還有更多資訊,因為您現在執行了一個已連接到您的 sshd(埠號)的 X 客戶端=6010)。

使用 SSH 隧道時,您必須了解網路拓撲。C 上的 SSH 伺服器打開一個新的套接字,該套接字偵聽埠 6010,因為 B 上的 SSH 客戶端要求它。在 B 上的 SSH 客戶端和 C 上的 SSH 伺服器之間仍然建立 ssh 隧道(埠號 = 22,如果 sshd 不是特殊配置),你看不到這個隧道連接,因為你grep出去了。C 上的 X 客戶端連接到 sshd(埠號=6010),然後 sshd 使用 ssh 隧道復用這些連接,並將這些連接轉發到 B 上的 X 伺服器。

“之間的聯繫 $ DISPLAY on C and $ DISPLAY on B" 並不真正存在,ssh 隧道是在 C:22 和 address_of_the_SSH_client_on_B 之間創建的。由於它是一個連接,因此在 LISTENING 狀態下是不可能的。

使用netstat -ap無需grep查看更多資訊。

我們在這個答案中提到的所有連接都意味著真正的 TCP 連接,從核心的角度來看,而不是從最終使用者的角度來看的“連接”。

引用自:https://unix.stackexchange.com/questions/506488