2021-05-12 14:32:11
使用SSH組態檔
如果您每天定期通過SSH連線到多個遠端系統,您會發現記住所有遠端IP地址,不同的使用者名稱,非標準埠和各種命令列選項很困難,如果不是不可能的話。
一種選擇是為每個遠端伺服器連線建立一個bash別名。但是,對於這個問題,還有另一種更好,更簡單的解決方案。OpenSSH允許您設定每使用者組態檔,您可以在其中為連線的每台遠端計算機儲存不同的SSH選項。
本指南介紹了SSH用戶端組態檔的基礎知識,並介紹了一些最常用的設定選項。
先決條件
我們假設您使用的是安裝了OpenSSH用戶端的Linux或macOS系統。
SSH組態檔位置
OpenSSH用戶端組態檔已命名config,它儲存在.ssh使用者主目錄下的目錄中。~/.ssh當使用者第一次執行ssh命令時,將自動建立該目錄。+
如果您從未使用過ssh,則command需要使用以下命令建立目錄:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
預設情況下,SSH組態檔可能不存在,因此您可能需要使用touch命令建立它:
touch ~/.ssh/config && chmod 600 ~/.ssh/config
此檔案必須只能由使用者讀寫,並且其他人無法存取:
chmod 700 ~/.ssh/config
SSH組態檔結構和模式
SSH組態檔採用以下結構:
Host hostname1 SSH_OPTION value SSH_OPTION value Host hostname2 SSH_OPTION value Host * SSH_OPTION value
SSH用戶端組態檔的內容組織為節(部分)。每個節都以該Host指令開頭,並包含在與遠端SSH伺服器建立連線時使用的特定SSH選項。
縮排不是必需的,但建議使用縮排,因為它會使檔案更易於閱讀。
該Host指令可以包含一個模式或以空格分隔的模式列表。每個模式可以包含零個或多個非空白字元或以下模式說明符之一:
- * - 匹配零個或多個字元。例如,Host *將匹配所有主機,同時192.168.0.*匹配192.168.0.0/24子網中的所有主機。
- ? - 恰好匹配一個字元。該模式Host 10.10.0.?將匹配10.10.0.[0-9]範圍內的所有主機。
- !- 在模式的開頭將否定其匹配例如,Host 10.10.0.* !10.10.0.5將匹配10.10.0.0/24子網中的任何主機,除了10.10.0.5。
SSH用戶端按節讀取組態檔節,如果多個模式匹配,則第一個匹配節中的選項優先。因此,應在檔案開頭提供更多特定於主機的宣告,並在檔案末尾提供更一般的覆蓋。
您可以通過鍵入man ssh_config終端或存取ssh_config手冊頁來查詢可用ssh選項的完整列表。
SSH的組態檔也被其他程式,如閱讀scp,sftp和rsync。
基本SSH組態檔範例
現在我們已經介紹了SSH組態檔的基礎知識,讓我們看一下下面的例子。
通常,當您通過SSH連線到遠端伺服器時,您將指定遠端使用者名稱,主機名和埠。例如,為了連線為指定使用者john到一個名為主機dev.example.com埠2322的命令列,鍵入:
ssh john@dev.example.com -p 2322
如果您想使用上面命令中提供的相同選項連線到伺服器,只需輸入named,ssh dev您需要將以下行放入您的"~/.ssh/config檔案:
的?/ .ssh /設定
Host dev HostName dev.example.com User john Port 2322
現在,如果你輸入:
ssh dev
ssh用戶端將讀取組態檔,它將使用為dev主機指定的連線詳細資訊,
共用SSH組態檔範例
此範例提供有關主機模式和選項優先順序的更多詳細資訊。
我們來看下面的範例檔案:
Host targaryen HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key Host tyrell HostName 192.168.10.20 Host martell HostName 192.168.10.50 Host *ell user oberyn Host * !martell LogLevel INFO Host * User root Compression yes
-
如果您鍵入ssh targaryenssh用戶端將讀取該檔案並將應用第一個匹配的選項Host targaryen。然後它將逐個檢查下一個節以匹配模式。下一個匹配的是Host * !martell,除了martell它之外的所有主機,它將應用此節中的連線選項。最後,最後一個定義Host *也是匹配的,但ssh用戶端只採用該Compression選項,因為該User選項已在該Host targaryen節中定義。本案例中使用的完整選項列表如下:
HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
- 在執行時ssh tyrell匹配的主機模式是:Host tyrell,Host *ell,Host * !martell和Host *。在這種情況下使用的選項是:
HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
如果執行ssh martell匹配的主機模式是:Host martell,Host *ell和Host *。在這種情況下使用的選項是:
HostName 192.168.10.50 User oberyn Compression yes
- 對於所有其他連線Host * !martell,Host *將使用和部分中指定的選項。
覆蓋SSH組態檔選項
ssh用戶端按以下優先順序接收其設定:
- 從命令列指定的選項
- 中定義的選項 ~/.ssh/config
- 中定義的選項 /etc/ssh/ssh_config
如果要覆蓋單個選項,可以在命令列中指定它。例如,如果您有以下定義:
Host dev HostName dev.example.com User john Port 2322
並且您希望使用所有其他選項,但要以使用者身份進行連線,root而不是john僅在命令列上指定使用者:
ssh -o "User=root" dev
在-F(configfile)開關允許你指定一個替代每個使用者組態檔。
如果您希望ssh用戶端忽略ssh組態檔中指定的所有選項,則可以使用:
ssh -F /dev/null user@example.com
結論
您已經學習了如何設定使用者ssh組態檔。您可能還需要設定基於SSH金鑰的身份驗證並連線到Linux伺服器而無需輸入密碼。
預設情況下,SSH偵聽埠22。 更改預設SSH埠可以降低自動攻擊的風險,從而為伺服器增加額外的安全層。
相關文章