透過 SSH 和 su 進行 X11 轉發

透過 SSH 和 su 進行 X11 轉發

對我來說,很奇怪的是,當使用帶有 X11 轉送的 ssh 連線時,使用者和 root 能夠看到xclock,但另一個使用者卻看不到。為什麼?

mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$

PS:^C意味著我能夠看到該xclock窗口,因此我按下^C返回終端。

答案1

連接到 X11 顯示器需要兩個資訊:顯示器名稱(通常在DISPLAY環境變數中傳遞)和餅乾,這是每個應用程式在連接時必須顯示的顯示器密碼。通常,cookie 儲存在 中~/.Xauthority,但也可以儲存在XAUTHORITY環境變數指示的不同檔案中。

看來DISPLAYSSH 設定的值被兩次呼叫保留了su。然而 cookie 位於~mahmood/.Xauthority;當您以 hmousavi 執行程式時,程式會在其中尋找 cookie~hmousavi/.Xauthority並找到不同的值。

原則上您可以運行XAUTHORITY=~mahmood/.Xauthority xclock,但 hmousavi 可能沒有讀取該檔案的權限 -.Xauthority其他使用者不應該讀取該檔案。您可以使用該xauth命令兩次,一次作為 mahmood 來提取 cookie 值 ( xauth list localhost:10.0),一次作為 hmousavi 來導入該值 ( xauth merge),但這很麻煩。讓 X11 應用程式運作最簡單的方法是全程使用 SSH,因為 SSH 會自動設定 X11 轉送:

mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock

將 mahmood 的 SSH 公鑰新增至 hmousavi.ssh/authorized_keys以允許此操作。

相關內容