首頁 > 軟體

使用SSH組態檔

2020-06-16 16:33:37

如果您每天定期通過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用戶端按以下優先順序接收其設定:

    1. 從命令列指定的選項
    2. 中定義的選項 ~/.ssh/config
    3. 中定義的選項 /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埠可以降低自動攻擊的風險,從而為伺服器增加額外的安全層。


IT145.com E-mail:sddin#qq.com