Ssh

ssh:為什麼我為特定主機禁用的轉發 X11 不起作用?

  • June 25, 2022

我為 ssh 使用別名

alias ssh
alias ssh='ssh -t -K -Y

我想使用 ssh 轉發 X11,除了一台主機,所以我這樣做了:

vim .ssh/config

host myhost
  port 22
  ForwardX11 no
  HostkeyAlgorithms +ssh-rsa
  PubkeyAcceptedAlgorithms +ssh-rsa

但..

ssh myhost 
sh: xauth: command not found
myuser@myhost$ 

似乎我的選擇被忽略了..為什麼?

我也試過

  ForwardX11 no
  ForwardX11trusted no

但沒有成功。

一個解決方法可以是這個……

\ssh myhost

所以 -t -K -y 被忽略,但我更喜歡更乾淨的解決方案

我忘了:遠端伺服器使用 dropbear

閱讀此頁面我看到可以為伺服器上的特定密鑰禁用 X11

vim .ssh/authorized_keys

no-X11-forwarding ssh-rsa......

但在這種情況下,它也拒絕 \ssh 命令!

ssh myhost
X11 forwarding request failed on channel 0
Connection to myhost closed by remote host.
Connection to myhost closed.

\ssh myhost 
Connection to myhost closed by remote host.
Connection to myhost closed.

在伺服器上使用此行有效..但對於 pubkey 無效,它需要密碼

no-agent -forwarding, no-port-forwarding, no-x11-forwarding ssh-rsa....

初步說明

您標記了dropbear,但我懷疑您的 SSH客戶端來自 Dropbear(即我懷疑您ssh實際上是dbclient;我想dbclient甚至不支持您使用的所有選項)。因此,此答案調查了來自 OpenSSH 的 SSH 客戶端的行為。

(我個人希望任何客戶端在與問題相關的方面複製 OpenSSH 的行為。關鍵是 OpenSSH 是 SSH 實現的事實標準。)


分析

來自man 5 ssh_config

ssh(1)按以下順序從以下來源獲取配置數據:

  1. 命令行選項
  2. 使用者配置文件 ( ~/.ssh/config)
  3. 系統範圍的配置文件 ( /etc/ssh/ssh_config)

對於每個參數,將使用第一個獲得的值。

$$ … $$

通過使用別名,您正在使用ssh -Y. 命令行選項在您的配置文件中ssh忽略。ForwardX11 no如果您希望配置文件中的某個選項起作用,則不得使用任何相反的命令行選項。命令行選項最重要,就是這樣。


解決方案

你寫了:

我想使用 ssh 轉發 X11 除了一台主機

而不是在別名中,在您的配置文件中實現它:

host myhost
  ForwardX11 no

host *
  ForwardX11 yes
  ForwardX11Trusted yes

注意手冊狀態:

由於使用了每個參數的第一個獲得值,因此應在文件開頭附近給出更多特定於主機的聲明,並在末尾給出一般預設值。

這意味著host myhost應該是 before host *,就像上面的例子一樣,而不是相反。

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