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

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

SSH 使用系統全局以及用戶指定(用戶自定義)的配置文件。在本文中,咱們將介紹如何建立一個自定義的 ssh 配置文件,而且經過特定的選項來鏈接到遠程主機。ubuntu

先決條件

  • 你必須在你的桌面 Linux 上安裝好 OpenSSH 客戶端
  • 瞭解經過 ssh 進行遠程鏈接的經常使用選項

SSH 客戶端配置文件

如下爲 ssh 客戶端配置文件:centos

  • /etc/ssh/ssh_config 爲默認的配置文件,屬於系統全局配置文件,包含應用到全部用戶的 ssh 客戶端的設置。
  • ~/.ssh/config 或者 $HOME/.ssh/config 爲用戶指定/自定義配置文件,這個文件中的配置只對指定的用戶有效,所以,它會覆蓋掉默認的系統全局配置文件中的設置。這也是咱們要建立和使用的文件。

默認狀況下,用戶是經過在 ssh 中輸入密碼來獲取驗證的,你能夠以一個簡單的步驟來 使用 Keygen 來設置 ssh 無密碼登陸[2]。安全

注:若是你的系統上不存在 ~/.ssh 目錄,那就手動建立它,並設置以下權限:服務器

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

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

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

該文件並不會被默認建立的,因此你須要使用具備讀取/寫入權限的用戶來建立它。ssh

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

上述文件包含由特定主機定義的各個部分,而且每一個部分只應用到主機定義中相匹配的部分。編輯器

~/.ssh/config 文件的常見格式以下,其中全部的空行和以 # 開頭的行爲註釋:加密

Host  host1
ssh_option1=value1
ssh_option2=value1 value2
ssh_option3=value1
Host  host2
ssh_option1=value1
ssh_option2=value1 value2
Host  *
ssh_option1=value1
ssh_option2=value1 value2

如上格式詳解:centos7

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

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

$ ssh host1

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

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

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

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

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

$ vi ~/.ssh/config

並定義必要的部分:

Host fedora25
HostName 192.168.56.15
Port 22
ForwardX11 no
Host centos7
HostName 192.168.56.10
Port 22
ForwardX11 no
Host ubuntu
HostName 192.168.56.5
Port 2222
ForwardX11 yes
Host *
User tecmint
IdentityFile ~/.ssh/id_rsa
Protocol 2
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 20
LogLevel INFO

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

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

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

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

然而,使用了 ssh 客戶端配置文件以後,咱們還能夠這樣:

$ ssh centos7

你也能夠在 man 幫助頁面尋找更多的設置選項和使用實例:

$ man ssh_config

至此,文畢。咱們在文中向你介紹了在 Linux 中如何使用用戶指定 (自定義) 的 ssh 客戶端配置文件。

相關文章
相關標籤/搜索