如何定製 SSH 來簡化遠程訪問
先決條件:
- 你必須 在你的桌面 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
上述文件包含由特定主機定義的各個部分,並且每個部分只應用到主機定義中相匹配的部分。
~/.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 的頭部定義,主機相關的設置就從此處開始,直到下一個頭部定義Host host2
出現,這樣形成一個完整的定義。- host1 和 host2 是在命令行中使用的主機別名,並非實際的遠程主機名。
- 其中,如 sshoption1=value1、sshoption2=value1 value2 等配置選項將應用到相匹配的主機,可以縮進以看起來更整齊些。
- 對於 ssh_option2=value1 value2 這樣的選項,ssh 執行時會按照順序優先使用 value1 的值。
- 頭部定義
Host *
(其中*
為匹配模式/通配符,匹配零個或多個字元) 會匹配零個或者多個主機。
仍舊以上述的格式為例,ssh 也是也這樣的形式類讀取配置文件的。如果你執行 ssh 命令來訪問遠程主機 host1,如下:
$ ssh host1
以上 ssh 命令會進行一下動作:
- 匹配配置文件中主機別名 host1,並使用頭部定義中的各個設置項。
- 繼續匹配下一個主機定義,然後發現命令行中提供的主機名沒有匹配的了,所以接下來的各個設置項會被略過。
- 最後執行到最後一個主機定義
Host *
, 這會匹配所有的主機。這裡,會將接下來的所有設置選項應用到所有的主機連接中。但是它不會覆寫之前已經有主機定義的那些選項。 - 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 配置文件的詳細解釋:
HostName
- 定義真正要登錄的主機名,此外,你也可以使用數字 IP 地址,不管是在命令行或是 HostName 定義中都允許使用其中任一種。User
– 指定以哪一個用戶來登錄。Port
– 設置連接遠程主機的埠,默認是 22 埠。但必須是遠程主機的 sshd 配置文件中定義的埠號。Protocol
– 這個選項定義了優先使用 ssh 支持的協議版本。常用的值為 『1』 和 『2』,同時使用兩個協議版本則必須使用英文逗號隔開。IdentityFile
– 指定一個用於讀取用戶 DSA、Ed25519、ECDSA 等授權驗證信息的文件。ForwardX11
– 定義 X11 連接是否自動重定向到安全通道和 DISPLAY 設置。有兩個可以設置的值,即yes
或no
。Compression
– 默認值為no
,如果設置為yes
,則在連接遠程主機過程中使用壓縮進行傳輸。ServerAliveInterval
– 設置當沒有收到伺服器響應 (或者數據))時的超時時間,單位為秒,ssh 會通過加密信道發送信息,請求伺服器響應。默認值為0
,這意味著 ssh 不會向伺服器發送響應請求;如果定義了 BatchMode 選項,則默認是 300 秒。ServerAliveCountMax
– 設置伺服器在沒有接收到伺服器的任何響應時,由伺服器發送的活動信息數量。LogLevel
– 定義 ssh 登錄信息的的日誌冗餘級別。允許的值為:QUIET
、FATAL
、ERROR
、INFO
、VERBOSE
、DEBUG
、DEBUG1
、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 客戶端配置文件。通過下方的反饋表單來寫一些與本文的相關的想法吧。
作者簡介:
Aaron Kili 是一名 Linux 和 F.O.S.S 忠實擁護者、高級 Linux 系統管理員、Web 開發者,目前在 TecMint 是一名活躍的博主,熱衷於計算機並有著強烈的只是分享意願。
譯者簡介:
GHLandy —— 生活中所有歡樂與苦悶都應藏在心中,有些事兒註定無人知曉,自己也無從說起。
via: http://www.tecmint.com/configure-custom-ssh-connection-in-linux/
作者:Aaron Kili 譯者:GHLandy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive