Ssh

在 SSH 配置中同時匹配使用者和主機

  • February 18, 2022

所以,我管理著一堆機器,為了便於訪問,我為每台機器設置了別名。

對於 ssh 客戶端配置中的每個人來說,這看起來像這樣:

Host MACHINE-1075 M1075 m1075 1075
   User service
   HostName 10.0.100.75

並且:

Match User service
   IdentityFile ~/.ssh/service_user

這使我可以簡單地鍵入ssh 1075以自動使用正確的身份文件和使用者進入該機器。

這適用於正常訪問。但是,有時我可能需要以 root 身份登錄才能執行某些任務。我可以通過明確指定身份文件來實現這一點,例如ssh root@1075 -i ~/.ssh/root_user.

這沒關係,但我真正想做的是配置 SSH 以從使用者和主機的組合中找出所需的身份文件,允許我輸入ssh root@1075並做正確的事情。我知道我可以匹配 root 使用者的所有用途並將其連結到一個身份文件:

Match User root
   IdentityFile ~/.ssh/root_user

但是,這不適用於我的情況,因為有幾組機器可能需要不同的憑據才能進行 root 訪問,因此並非所有機器都應該匹配。理想情況下,我想做的是:

Match Host 10.0.100.75 && Match User root
   IdentityFile ~/.ssh/root_user

但這似乎不起作用。作為一個臨時解決方案,我只是將機器別名root-作為前綴,所以我可以這樣做ssh root-1075,這還不錯,但這並不是我想要的。

這是在執行 OpenSSH 8.4 的 Ubuntu 21.10 上。

恕我直言,在 中並不完全清楚man ssh_config,但是匹配多個條件的語法似乎是

Match keyword [pattern|pattern-list] keyword [pattern|pattern-list]

其中模式以pattern-list逗號分隔,但關鍵字模式對通過簡單的空格相互分隔:

Match Host 10.0.100.75 User root

不支持顯式邏輯運算符 like &&,因為必須滿足所有條件 -AND理解邏輯。

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