.ssh/config 文件的解釋算法及配置原則


前言

SSH 是連接遠程主機最常用的方式,盡管連接到單個主機的基本操作非常直接,但當你開始使用大量的遠程系統時,這就會成為笨重和復雜的任務。

幸運的是,OpenSSH 允許您提供自定義的客戶端連接選項。這些選項可以被存儲到一個配置文件中,這個配置文件可以用來定義每個主機的配置。這有助於保持每個主機的連接選項更好的獨立和組織,也你讓你在需要連接時避免在命令行中寫繁瑣的選項。

在本文中,我們將介紹 SSH 客戶端配置文件的基本知識,了解 SSH 如何解釋配置文件,但不會介紹 SSH 具體選項的含義及使用。

SSH 文件的結構及解釋算法

本地系統的每個用戶都可以維護一個客戶端的 SSH 配置文件,這個配置文件可以包含你在命令行中使用 ssh 時參數,也可以存儲公共連接選項並在連接時自動處理。你可以在命令上中使用 ssh 來指定 flag ,以覆蓋配置文件中的選項。

SSH 客戶端配置文件的位置

配置文件的文件名為 config ,位於用戶 home 目錄下的 .ssh 文件夾下。

~/.ssh/config

通常,該文件不是默認創建的,因此你可能要自己創建它。

配置文件的結構

配置文件通過 Host 來組織,每一個 Host 定義項為匹配的主機定義連接選項。通配符可以用,為了讓選項有更大的范圍。

配置文件看起來是這樣的:

Host firsthost
    SSH_OPTIONS_1 custom_value
    SSH_OPTIONS_2 custom_value
    SSH_OPTIONS_3 custom_value

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

解釋算法

只有理解 SSH 怎么解釋配置文件,你才能寫出合理的配置文件。

SSH 使命令行中給出的主機名與配置文件中定義的 Host 來匹配。它從文件頂部向下執行此操作,所以順序非常重要。

現在是指出 Host 定義中的模式不必與您要連接的實際主機匹配的好時機。 實際上,您可以使用這些定義為主機設置別名,以替代實際的主機名。

看個例子:

Host dev1
    HostName dev1.example.com
    User tom

現在要連接到 tom@dev1.example.com,就可以通過在命令行中輸入如下命令:

ssh dev1

記住這一點,我們現在繼續討論在由上而下的過程中,SSH 怎么應用每一個配置選中。它從頂部開始,檢查每一個 Host 定義是否與命令行中給出的主機匹配。在上一個例子中,就是檢查 dev1 。

當找到第一個匹配的主機定義時,每個關聯的SSH選項都將應用於即將到來的連接(為了方便下邊的討論,這里我們稱該連接接為“連接a”)。 盡管如此,解釋並沒有結束。

SSH 繼續在文件中向下查找,檢查是否有其他匹配的 Host 定義。如果有另一個 Host 定義匹配,SSH 將考慮該 Host 定義下的配置選項。如果新的配置選項中有 連接a 咱時沒有使用的選項,就把這些選項也加入 連接a 中。

總結一下,SSH 將按順序解釋與命令行上給出主機名匹配的每個 Host 定義。在這個過程中,SSH 始終使用為每個選項給出的第一個值。沒有辦法覆蓋之前已經匹配的 Host 定義給出的值。

這樣看來,寫配置文件的一個簡單的原則是。越細化的 Host 定義,要寫在上邊。通用的 Host 定義,要寫在下邊。

看個例子:

Host firsthost
    SSH_OPTIONS_1 custom_value1
    SSH_OPTIONS_2 custom_value2
    SSH_OPTIONS_3 custom_value3

Host secondhost
    ANOTHER_OPTION custom_value4

Host *host
    ANOTHER_OPTION custom_value5

Host *
    CHANGE_DEFAULT custom_value6

如果 ssh firsthost ,那么 SSH 使用的選項有 SSH_OPTIONS_1SSH_OPTIONS_2SSH_OPTIONS_3ANOTHER_OPTIONCHANGE_DEFAULT ,使用的值分別為 custom_value1custom_value2custom_value3custom_value5custom_value6

如果 ssh secondhost,那么 SSH 使用的選項有 ANOTHER_OPTIONCHANGE_DEFAULT ,使用的值分別為 custom_value4custom_value6

基本的連接選項

這部分直接用實例來解釋:要將名為 apollo 的用戶連接到名為 example.com,該主機在 4567 端口上運行 SSH 守護程序。

一般情況下,我們會在命令行在這么寫:

ssh -p 4567 apollo@example.com

如果使用選項的全名,是這樣的:

ssh -o "User=apollo" -o "Port=4567" -o "HostName=example.com"

我們可以把第二種方式中大寫字母開頭的選項放到配置文件中。可以通過 man ssh_config 來獲取完整的可用的選項列表。

現在,用配置文件寫一下上邊的例子:

Host home
    HostName example.com
    User apollo
    Port 4567

對每個選項而言,這樣寫也可以(以Port為例):

Port = 4567
Port=4567

配置共享的選項

繼續上一部分的例子,我又兩個主機,分別 home 和 work ,在兩台主機上,我的用戶名都是 apollo。簡單,直接修改配置文件:

Host home
    HostName example.com
    User apollo
    Port 4567

Host work
    HostName company.com
    User apollo

這樣寫沒有問題,但是我們可以把 User 提出來:

Host home
    HostName example.com
    Port 4567

Host work
    HostName company.com

Host *
    User apollo

非常不錯,不過新問題來了,你有一個好朋友 Mars ,有一個主機共享給你用,但他喜歡把你的名字倒着念,那么該怎么辦?

Host home
    HostName example.com
    Port 4567

Host work
    HostName company.com

Host friend-Mars
    HostName abc.com
    User ollopa

Host *
    User apollo

隨着時間流逝,朋友越來越多,他們都有主機給你用,而且都喜歡把你的名字倒着念,那該怎么辦?

Host home
    HostName example.com
    Port 4567

Host work
    HostName company.com

Host friend-Mars
    HostName mars.com

Host friend-Mercury
    HostName mercury.com

Host friend-Jupiter
    HostName jupiter.com

Host friend-*
    User ollopa

Host *
    User apollo

原文為How To Configure Custom Connection Options for your SSH Client,本文在原文的基礎上略有修改。


文章鏈接: https://www.cnblogs.com/xjshi/p/9146296.html

轉載請注明住處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM