天天看點

如何定制 SSH 來簡化遠端通路

ssh (指 ssh 用戶端)是一個用于通路遠端主機的程式,它使得使用者能夠 在遠端主機上執行指令。這是在登入遠端主機中的最受推崇的方法之一,因為其設計目的就是在非安全網絡環境上為兩台非受信主機的通信提供安全加密。

ssh 使用系統全局以及使用者指定(使用者自定義)的配置檔案。在本文中,我們将介紹如何建立一個自定義的 ssh 配置檔案,并且通過特定的選項來連接配接到遠端主機。

<a target="_blank"></a>

了解通過 ssh 進行遠端連接配接的常用選項。

以下為 ssh 用戶端配置檔案:

<code>/etc/ssh/ssh_config</code> 為預設的配置檔案,屬于系統全局配置檔案,包含應用到所有使用者的 ssh 用戶端的設定。

<code>~/.ssh/config</code> 或者 <code>$home/.ssh/config</code> 為使用者指定/自定義配置檔案,這個檔案中的配置隻對指定的使用者有效,是以,它會覆寫掉預設的系統全局配置檔案中的設定。這也是我們要建立和使用的檔案。

注:如果你的系統上不存在 <code>~/.ssh</code> 目錄,那就手動建立它,并設定如下權限:

<code>$ mkdir -p ~/.ssh</code>

<code>$ chmod 0700 ~/.ssh</code>

以上的 <code>chmod</code> 指令表明,隻有目錄屬主對該目錄有讀取、寫入和執行權限,這也是 ssh 所要求的設定。

該檔案并不會被預設建立的,是以你需要使用具有讀取/寫入權限的使用者來建立它。

<code>$ touch ~/.ssh/config</code>

<code>$ chmod 0700 ~/.ssh/config</code>

上述檔案包含由特定主機定義的各個部分,并且每個部分隻應用到主機定義中相比對的部分。

<code>~/.ssh/config</code> 檔案的常見格式如下,其中所有的空行和以 <code>‘#’</code> 開頭的行為注釋:

<code>host host1</code>

<code>ssh_option1=value1</code>

<code>ssh_option2=value1 value2</code>

<code>ssh_option3=value1</code>

<code>host host2</code>

<code>host *</code>

如上格式詳解:

<code>host host1</code> 為關于 host1 的頭部定義,主機相關的設定就從此處開始,直到下一個頭部定義 <code>host host2</code> 出現,這樣形成一個完整的定義。

host1 和 host2 是在指令行中使用的主機名稱,并非實際的遠端主機名。

其中,如 sshoption1=value1、sshoption2=value1 value2 等配置選項将應用到相比對的主機,可以縮進以看起來更整齊些。

對于 ssh_option2=value1 value2 這樣的選項,ssh 執行時會按照順序優先使用 value1 的值。

頭部定義 <code>host *</code> (其中 <code>*</code> 為比對模式/通配符,比對零個或多個字元) 會比對零個或者多個主機。

仍舊以上述的格式為例,ssh 也是也這樣的形式類讀取配置檔案的。如果你執行 ssh 指令來通路遠端主機 host1,如下:

<code>$ ssh host1</code>

以上 ssh 指令會進行一下動作:

比對配置檔案中主機名稱 host1,并使用頭部定義中的各個設定項。

繼續比對下一個主機定義,然後發現指令行中提供的主機名沒有比對的了,是以接下來的各個設定項會被略過。

最後執行到最後一個主機定義 <code>host *</code>, 這會比對所有的主機。這裡,會将接下來的所有設定選項應用到所有的主機連接配接中。但是它不會覆寫之前已經有主機定義的那些選項。

ssh host2 與此類似。

在你了解了 ssh 用戶端配置檔案的工作方式之後,你可以通過如下方式來建立它。記得使用你的伺服器環境中對應的選項、值 (主機名稱、端口号、使用者名等)。

通過你最喜歡的編輯器來打開配置檔案:

<code>$ vi ~/.ssh/config</code>

并定義必要的部分:

<code>host fedora25</code>

<code>hostname 192.168.56.15</code>

<code>port 22</code>

<code>forwardx11 no</code>

<code>host centos7</code>

<code>hostname 192.168.56.10</code>

<code>host ubuntu</code>

<code>hostname 192.168.56.5</code>

<code>port 2222</code>

<code>forwardx11 yes</code>

<code>host *</code>

<code>user tecmint</code>

<code>identityfile ~/.ssh/id_rsa</code>

<code>protocol 2</code>

<code>compression yes</code>

<code>serveraliveinterval 60</code>

<code>serveralivecountmax 20</code>

<code>loglevel info</code>

以上 ssh 配置檔案的詳細解釋:

<code>hostname</code> - 定義真正要登入的主機名,此外,你也可以使用數字 ip 位址,不管是在指令行或是 hostname 定義中都允許使用其中任一種。

<code>user</code> – 指定以哪一個使用者來登入。

<code>port</code> – 設定連接配接遠端主機的端口,預設是 22 端口。但必須是遠端主機的 sshd 配置檔案中定義的端口号。

<code>protocol</code> – 這個選項定義了優先使用 ssh 支援的協定版本。常用的值為 ‘1’ 和 ‘2’,同時使用兩個協定版本則必須使用英文逗号隔開。

<code>identityfile</code> – 指定一個用于讀取使用者 dsa、ed25519、ecdsa 等授權驗證資訊的檔案。

<code>forwardx11</code> – 定義 x11 連接配接是否自動重定向到安全通道和 display 設定。有兩個可以設定的值,即<code>yes</code> 或 <code>no</code>。

<code>compression</code> – 預設值為 <code>no</code>,如果設定為 <code>yes</code>,則在連接配接遠端主機過程中使用壓縮進行傳輸。

<code>serveraliveinterval</code> – 設定當沒有收到伺服器響應 (或者資料))時的逾時時間,機關為秒,ssh 會通過加密信道發送資訊,請求伺服器響應。預設值為 <code>0</code>,這意味着 ssh 不會向伺服器發送響應請求;如果定義了 batchmode 選項,則預設是 300 秒。

<code>serveralivecountmax</code> – 設定伺服器在沒有接收到伺服器的任何響應時,由伺服器發送的活動資訊數量。

<code>loglevel</code> – 定義 ssh 登入資訊的的日志備援級别。允許的值為:<code>quiet</code>、<code>fatal</code>、<code>error</code>、<code>info</code>、<code>verbose</code>、<code>debug</code>、<code>debug1</code>、<code>debug2</code> 和 <code>debug3</code>,預設為 <code>info</code>。

連接配接任意遠端主機的标準方法是在上述兩個檔案中定義第二個部分(我連接配接的是 centos 7)。一般情況下,我們這樣輸入指令:

<code>$ ssh -i ~/.ssh/id_rsa -p 22 [email protected]</code>

然而,使用了 ssh 用戶端配置檔案之後,我們還可以這樣:

<code>$ ssh centos7</code>

你也可以在 man 幫助頁面尋找更多的設定選項和使用執行個體:

<code>$man ssh_config</code>

原文釋出時間為:2017-03-15

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀