前言
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_1
、SSH_OPTIONS_2
、SSH_OPTIONS_3
、ANOTHER_OPTION
、CHANGE_DEFAULT
,使用的值分別為 custom_value1
、custom_value2
、custom_value3
、custom_value5
、custom_value6
。
如果 ssh secondhost
,那么 SSH 使用的選項有 ANOTHER_OPTION
、CHANGE_DEFAULT
,使用的值分別為 custom_value4
、custom_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
轉載請注明住處