Linux 下如何定製 SSH 來簡化遠端訪問
SSH 使用系統全域性以及使用者指定 (使用者自定義) 的配置檔案。在本文中,我們將介紹如何建立一個自定義的 ssh 配置檔案,並且透過特定的選項來連線到遠端 WordPress 主機。
SSH (指 SSH 客戶端) 是一個用於訪問遠端 WordPress 主機的程式,它使得使用者能夠 在遠端 WordPress 主機上執行命令。這是在登入遠端 WordPress 主機中的最受推崇的方法之一,因為其設計目的就是在非安全網際網路環境上為兩臺非受信 WordPress 主機的通訊提供安全加密。
SSH 使用系統全域性以及使用者指定 (使用者自定義) 的配置檔案。在本文中,我們將介紹如何建立一個自定義的 ssh 配置檔案,並且透過特定的選項來連線到遠端 WordPress 主機。
先決條件:
你必須 在你的桌面 Linux 上安裝好 OpenSSH 客戶端。
瞭解透過 ssh 進行遠端連線的常用選項。
SSH 客戶端配置檔案
以下為 ssh 客戶端配置檔案:
/etc/ssh/ssh_config 為預設的配置檔案,屬於系統全域性配置檔案,包含應用到所有使用者的 ssh 客戶端的設定。
~/.ssh/config 或者 $HOME/.ssh/config 為使用者指定/自定義配置檔案,這個檔案中的配置只對指定的使用者有效,因此,它會覆蓋掉預設的系統全域性配置檔案中的設定。這也是我們要建立和使用的檔案。
預設情況下,使用者是透過在 ssh 中輸入密碼來獲取驗證的,你可以以一個簡單的步驟來 使用 Keygen 來設定 ssh 無密碼登入。
注:如果你的系統上不存在 ~/.ssh 目錄,那就手動建立它,並設定如下許可權:
$ mkdir -p ~/.ssh
$ chmod 0700 ~/.ssh
以上的 chmod 命令表明,只有目錄屬主對該目錄有讀取、寫入和執行許可權,這也是 ssh 所要求的設定。
如何建立使用者指定的 SSH 配置檔案
該檔案並不會被預設建立的,所以你需要使用具有讀取/寫入許可權的使用者來建立它。
$ touch ~/.ssh/config
$ chmod 0700 ~/.ssh/config
上述檔案包含由特定 WordPress 主機定義的各個部分,並且每個部分只應用到 WordPress 主機定義中相匹配的部分。
~/.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
如上格式詳解:
Host host1 為關於 host1 的頭部定義,WordPress 主機相關的設定就從此處開始,直到下一個頭部定義 Host host2 出現,這樣形成一個完整的定義。
host1 和 host2 是在命令列中使用的 WordPress 主機別名,並非實際的遠端 WordPress 主機名。
其中,如 sshoption1=value1 、 sshoption2=value1 value2 等配置選項將應用到相匹配的 WordPress 主機,可以縮排以看起來更整齊些。
對於 ssh_option2=value1 value2 這樣的選項,ssh 執行時會按照順序優先使用 value1 的值。
頭部定義 Host * (其中 * 為匹配模式/萬用字元,匹配零個或多個字元) 會匹配零個或者多個 WordPress 主機。
仍舊以上述的格式為例,ssh 也是也這樣的形式類讀取配置檔案的。如果你執行 ssh 命令來訪問遠端 WordPress 主機 host1,如下:
$ ssh host1
以上 ssh 命令會進行一下動作:
匹配配置檔案中 WordPress 主機別名 host1,並使用頭部定義中的各個設定項。
繼續匹配下一個 WordPress 主機定義,然後發現命令列中提供的 WordPress 主機名沒有匹配的了,所以接下來的各個設定項會被略過。
最後執行到最後一個 WordPress 主機定義 Host *, 這會匹配所有的 WordPress 主機。這裡,會將接下來的所有設定選項應用到所有的 WordPress 主機連線中。但是它不會覆寫之前已經有 WordPress 主機定義的那些選項。
ssh host2 與此類似。
如何使用使用者指定的 shh 配置檔案
在你理解了 ssh 客戶端配置檔案的工作方式之後,你可以透過如下方式來建立它。記得使用你的站群伺服器環境中對應的選項、值 (WordPress 主機別名、埠號、使用者名稱等) 。
透過你最喜歡的編輯器來開啟配置檔案:
$ 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 配置檔案的詳細解釋:
HostName – 定義真正要登入的 WordPress 主機名,此外,你也可以使用數字 IP 地址,不管是在命令列或是 HostName 定義中都允許使用其中任一種。
User – 指定以哪一個使用者來登入。
Port – 設定連線遠端 WordPress 主機的埠,預設是 22 埠。但必須是遠端 WordPress 主機的 sshd 配置檔案中定義的埠號。
Protocol – 這個選項定義了優先使用 ssh 支援的協議版本。常用的值為 ‘1’ 和 ‘2’,同時使用兩個協議版本則必須使用英文逗號隔開。
IdentityFile – 指定一個用於讀取使用者 DSA 、 Ed25519 、 ECDSA 等授權驗證資訊的檔案。
ForwardX11 – 定義 X11 連線是否自動重定向到安全通道和 DISPLAY 設定。有兩個可以設定的值,即 yes 或 no 。
Compression – 預設值為 no,如果設定為 yes,則在連線遠端 WordPress 主機過程中使用壓縮排行傳輸。
ServerAliveInterval – 設定當沒有收到站群伺服器響應 (或者資料)) 時的超時時間,單位為秒,ssh 會透過加密通道傳送資訊,請求站群伺服器響應。預設值為 0,這意味著 ssh 不會向站群伺服器傳送響應請求; 如果定義了 BatchMode 選項,則預設是 300 秒。
ServerAliveCountMax – 設定站群伺服器在沒有接收到站群伺服器的任何響應時,由站群伺服器傳送的活動資訊數量。
LogLevel – 定義 ssh 登入資訊的的日誌冗餘級別。允許的值為:QUIET 、 FATAL 、 ERROR 、 INFO 、 VERBOSE 、 DEBUG 、 DEBUG1 、 DEBUG2 和 DEBUG3,預設為 INFO 。
連線任意遠端 WordPress 主機的標準方法是在上述兩個檔案中定義第二個部分 (我連線的是 CentOS 7) 。一般情況下,我們這樣輸入命令:
$ ssh -i ~/.ssh/id_rsa -p 22 tecmint@192.168.56.10
然而,使用了 ssh 客戶端配置檔案之後,我們還可以這樣:
$ ssh centos7
你也可以在 man 幫助頁面尋找更多的設定選項和使用例項:
$man ssh_config
至此,文畢。我們在文中向你介紹了在 Linux 中如何使用使用者指定 (自定義) 的 ssh 客戶端配置檔案。透過下方的反饋表單來寫一些與本文的相關的想法吧。