閱讀364 返回首頁    go 技術社區[雲棲]


如何定製 SSH 來簡化遠程訪問

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

SSH 使用係統全局以及用戶指定(用戶自定義)的配置文件。在本文中,我們將介紹如何創建一個自定義的 ssh 配置文件,並且通過特定的選項來連接到遠程主機。

先決條件:

  1. 你必須 在你的桌麵 Linux 上安裝好 OpenSSH 客戶端
  2. 了解通過 ssh 進行遠程連接的常用選項。

SSH 客戶端配置文件

以下為 ssh 客戶端配置文件:

  1. /etc/ssh/ssh_config 為默認的配置文件,屬於係統全局配置文件,包含應用到所有用戶的 ssh 客戶端的設置。
  2. ~/.ssh/config 或者 $HOME/.ssh/config 為用戶指定/自定義配置文件,這個文件中的配置隻對指定的用戶有效,因此,它會覆蓋掉默認的係統全局配置文件中的設置。這也是我們要創建和使用的文件。

默認情況下,用戶是通過在 ssh 中輸入密碼來獲取驗證的,你可以以一個簡單的步驟來 使用 Keygen 來設置 ssh 無密碼登錄

注:如果你的係統上不存在 ~/.ssh 目錄,那就手動創建它,並設置如下權限:


  1. $ mkdir -p ~/.ssh
  2. $ chmod 0700 ~/.ssh

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

如何創建用戶指定的 SSH 配置文件

該文件並不會被默認創建的,所以你需要使用具有讀取/寫入權限的用戶來創建它。


  1. $ touch ~/.ssh/config
  2. $ chmod 0700 ~/.ssh/config

上述文件包含由特定主機定義的各個部分,並且每個部分隻應用到主機定義中相匹配的部分。

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


  1. Host host1
  2. ssh_option1=value1
  3. ssh_option2=value1 value2
  4. ssh_option3=value1
  5. Host host2
  6. ssh_option1=value1
  7. ssh_option2=value1 value2
  8. Host *
  9. ssh_option1=value1
  10. ssh_option2=value1 value2

如上格式詳解:

  1. Host host1 為關於 host1 的頭部定義,主機相關的設置就從此處開始,直到下一個頭部定義 Host host2 出現,這樣形成一個完整的定義。
  2. host1 和 host2 是在命令行中使用的主機別名,並非實際的遠程主機名。
  3. 其中,如 sshoption1=value1、sshoption2=value1 value2 等配置選項將應用到相匹配的主機,可以縮進以看起來更整齊些。
  4. 對於 ssh_option2=value1 value2 這樣的選項,ssh 執行時會按照順序優先使用 value1 的值。
  5. 頭部定義 Host * (其中 * 為匹配模式/通配符,匹配零個或多個字符) 會匹配零個或者多個主機。

仍舊以上述的格式為例,ssh 也是也這樣的形式類讀取配置文件的。如果你執行 ssh 命令來訪問遠程主機 host1,如下:


  1. $ ssh host1

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

  1. 匹配配置文件中主機別名 host1,並使用頭部定義中的各個設置項。
  2. 繼續匹配下一個主機定義,然後發現命令行中提供的主機名沒有匹配的了,所以接下來的各個設置項會被略過。
  3. 最後執行到最後一個主機定義 Host *, 這會匹配所有的主機。這裏,會將接下來的所有設置選項應用到所有的主機連接中。但是它不會覆寫之前已經有主機定義的那些選項。
  4. ssh host2 與此類似。

如何使用用戶指定的 SSH 配置文件

在你理解了 ssh 客戶端配置文件的工作方式之後,你可以通過如下方式來創建它。記得使用你的服務器環境中對應的選項、值 (主機別名、端口號、用戶名等)。

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


  1. $ vi ~/.ssh/config

並定義必要的部分:


  1. Host fedora25
  2. HostName 192.168.56.15
  3. Port 22
  4. ForwardX11 no
  5. Host centos7
  6. HostName 192.168.56.10
  7. Port 22
  8. ForwardX11 no
  9. Host ubuntu
  10. HostName 192.168.56.5
  11. Port 2222
  12. ForwardX11 yes
  13. Host *
  14. User tecmint
  15. IdentityFile ~/.ssh/id_rsa
  16. Protocol 2
  17. Compression yes
  18. ServerAliveInterval 60
  19. ServerAliveCountMax 20
  20. LogLevel INFO

以上 ssh 配置文件的詳細解釋:

  1. HostName - 定義真正要登錄的主機名,此外,你也可以使用數字 IP 地址,不管是在命令行或是 HostName 定義中都允許使用其中任一種。
  2. User – 指定以哪一個用戶來登錄。
  3. Port – 設置連接遠程主機的端口,默認是 22 端口。但必須是遠程主機的 sshd 配置文件中定義的端口號。
  4. Protocol – 這個選項定義了優先使用 ssh 支持的協議版本。常用的值為 ‘1’ 和 ‘2’,同時使用兩個協議版本則必須使用英文逗號隔開。
  5. IdentityFile – 指定一個用於讀取用戶 DSA、Ed25519、ECDSA 等授權驗證信息的文件。
  6. ForwardX11 – 定義 X11 連接是否自動重定向到安全通道和 DISPLAY 設置。有兩個可以設置的值,即yes 或 no
  7. Compression – 默認值為 no,如果設置為 yes,則在連接遠程主機過程中使用壓縮進行傳輸。
  8. ServerAliveInterval – 設置當沒有收到服務器響應 (或者數據))時的超時時間,單位為秒,ssh 會通過加密信道發送信息,請求服務器響應。默認值為 0,這意味著 ssh 不會向服務器發送響應請求;如果定義了 BatchMode 選項,則默認是 300 秒。
  9. ServerAliveCountMax – 設置服務器在沒有接收到服務器的任何響應時,由服務器發送的活動信息數量。
  10. LogLevel – 定義 ssh 登錄信息的的日誌冗餘級別。允許的值為:QUIETFATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2 和 DEBUG3,默認為 INFO

連接任意遠程主機的標準方法是在上述兩個文件中定義第二個部分(我連接的是 CentOS 7)。一般情況下,我們這樣輸入命令:


  1. $ ssh -i ~/.ssh/id_rsa -p 22 tecmint@192.168.56.10

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


  1. $ ssh centos7

你也可以在 man 幫助頁麵尋找更多的設置選項和使用實例:


  1. $man ssh_config



原文發布時間為:2017-03-15

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-24 16:02:37

  上一篇:go  《STM32庫開發實戰指南:基於STM32F4》----3.2 STM32能做什麼
  下一篇:go  如何編寫和使用自定義的 Shell 函數和函數庫