Ssh
在 SSH 配置中同時匹配使用者和主機
所以,我管理著一堆機器,為了便於訪問,我為每台機器設置了別名。
對於 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
理解邏輯。