從 Linux 到 Mac 的 SSH 轉發 X11 顯示在一段時間後失去
從 Mac (10.7.2) 登錄到 Linux (Ubuntu 8.04) 時,我遇到了一個新的令人煩惱的問題,即 ssh 轉發我的 X11 連接。我使用 ssh -X 登錄遠端機器並從該 shell 啟動基於 X11 的應用程序沒有問題。
最近開始發生的事情是,在一段時間後(大約幾個小時),從同一個 shell 對 X11 應用程序的額外呼叫無法啟動,因為轉發的顯示被阻止(我推測)。例如,當嘗試啟動 xterm 時,我會收到有關 DISPLAY 設置錯誤的常見消息,例如:
xterm Xt 錯誤:無法打開顯示:localhost:10.0
但是我在登錄時啟動的 X11 應用程序仍然執行良好,使用完全相同的顯示 (localhost:10.0),只是它是更早啟動的。
我在 sshd_config 中打開了詳細日誌記錄,我在 /var/log/auth.log 文件中看到了這一點,以響應失敗的 xterm 啟動嘗試:
sshd
$$ 22104 $$: 通道 8: 打開失敗: 行政禁止: 打開失敗
如果我再次 ssh -X 到伺服器,啟動一個新的 shell 並分配一個新的顯示 (localhost:11.0),同樣的過程會重複:X11 應用程序在早期開始執行就很好,只要我保持它們打開(幾天),但幾個小時後,我無法從該 shell 啟動任何新的。
詳細資訊:在 Ubuntu 8.04 上執行的 OpenSSH sshd 伺服器,顯示轉發到執行 Lion (10.7.2) 的 Mac,預設 Apple X 伺服器。這些系統連接在乙太網 LAN 上,它們之間只有一個交換機。兩台機器都沒有執行防火牆。直到最近(幾天前),這個設置工作得很好,所以我對接下來要看的地方感到困惑。我絕不是 X11 或 SSH 專家,但擁有良好的 UNIX/Linux 經驗。儘管我嘗試更改一些選項來嘗試調試它,但在客戶端或伺服器配置中沒有任何明顯的變化,例如將 sshd_config 的 TCPKeepAlive 設置為 no,並設置“host +localhost”(你可以告訴我一直在Google搜尋)。
當從 Linux 11.10 筆記型電腦通過同一網路登錄到同一遠端主機並切換時,不會發生此問題 - 數小時後可以從同一 ssh 登錄 shell 成功呼叫 xterm,而從 Mac 進行的相同實驗失敗(今天早上測試確定),所以它似乎是一個特定於 Mac 的問題。
在遠端機器(sshd 伺服器)上設置了“LogLevel DEBUG3”,並且我沒有對客戶端連接進行任何更改,/var/log/auth.log 在一夜之間顯示連接狀態報告中的細微變化,這是使用的埠號通過來自 Linux 機器的一個成功的 ssh 會話(我認為),連接 #7 如下:
sshd
$$ 20173 $$: debug3: channel 7: status: 以下連接已打開:\r\n #0 server-session (t4 r0 i0/0 o0/0 fd 14/13 cfd -1)\r\n #3 X11 connection from 127.0 .0.1 埠 57564 (t4 r1 i0/0 o0/0 fd 16/16 cfd -1)\r\n #4 X11 連接來自 127.0.0.1 埠 57565 (t4 r2 i0/0 o0/0 fd 17/17 cfd - 1)\r\n #5 X11 連接來自 127.0.0.1 埠 57566 (t4 r3 i0/0 o0/0 fd 18/18 cfd -1)\r\n #6 X11 連接來自 127.0.0.1 埠 57567 (t4 r4 i0/0 o0/0 fd 19/19 cfd -1)\r\n #7 X11 連接來自 127.0.0.1 埠 59007
在此報告中,狀態報告之間的所有內容都相同,除了連接 #7 使用的埠號,我相信它是 Linux 客戶端——唯一仍然保持顯示連接的埠號。從一夜之間的一系列報告來看,它會隨著時間的推移繼續增加。
謝謝你的幫助,
-麥克風
在我更改 Mac 客戶端的 /etc/ssh_config 以包含以下行後,ssh 會話開始:
ForwardX11Timeout 596h
一切正常,一整天都在工作。到目前為止,他們都會拒絕啟動新的 xterm。所以我相信這就是答案,幸運的是,這是一個簡單的解決方案,但超時仍將在 3-1/2 週後發生。
man ssh_config
ForwardX11可信
如果此選項設置為“是”,則遠端 X11 客戶端將擁有對原始 X11 顯示的完全訪問權限。如果此選項設置為“no”,則遠端 X11 客戶端將被視為不受信任,並且無法竊取或篡改屬於受信任 X11 客戶端的數據。此外,用於會話的 xauth(1) 令牌將設置為在 20 分鐘後過期。在此時間之後,遠端客戶端將被拒絕訪問。預設值為“no” 請參閱 X11 SECURITY 擴展規範以獲取有關對不受信任的客戶端施加的限制的完整詳細資訊。