1. 程式人生 > 其它 >利用 SSH 的使用者配置檔案 Config 管理 SSH 會話

利用 SSH 的使用者配置檔案 Config 管理 SSH 會話

技術標籤:工具

參考:

https://luohoufu.github.io/2016/07/21/deepin2/

通常利用 SSH 連線遠端伺服器,一般都要輸入以下類似命令:

$ ssh [email protected] -p port

如果擁有多個 SSH 賬號,在終端裡直接 SSH 登陸要記住每個 SSH 賬號的引數是件不容易的事,而且比較浪費精力和時間。

還好 SSH 提供一種優雅且靈活的方式來解決這個問題,就是利用 SSH 的使用者配置檔案Config管理 SSH 會話。

使用SSH配置檔案

SSH 程式可以從以下途徑獲取配置引數:

使用者配置檔案 (~/.ssh/config)

系統配置檔案 (/etc/ssh/ssh_config)

配置檔案可分為多個配置區段,每個配置區段使用"Host"來區分。我們可以在命令列中輸入不同的Host來載入不同的配置段。

配置項

下面先介紹一些常用的SSH配置項

  • Host 別名
  • HostName 主機名
  • Port 埠
  • User 使用者名稱
  • IdentityFile 金鑰檔案的路徑
  • IdentitiesOnly 只接受SSH key 登入
  • PreferredAuthentications 強制使用Public Key驗證

Host

Host配置項標識了一個配置區段。

SSH配置項引數值可以使用萬用字元:

'*' 代表 0~n 個非空白字元。
'?'
代表一個非空白字元。 '!' 表示例外通配。

我們可以在系統配置檔案中看到一個匹配所有 host 的預設配置區段:

$ cat /etc/ssh/ssh_config | grep '^Host'
Host *

這裡有一些預設配置項,我們可以在使用者配置檔案中覆蓋這些預設配置。

GlobalKnownHostsFile

指定一個或多個全域性認證主機快取檔案,用來快取通過認證的遠端主機的金鑰,多個檔案用空格分隔。預設快取檔案為:/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2

HostName

指定遠端主機名,可以直接使用數字IP地址。如果主機名中包含 ‘%h’ ,則實際使用時會被命令列中的主機名替換。

IdentityFile

指定金鑰認證使用的私鑰檔案路徑。預設為~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 或 ~/.ssh/id_rsa 中的一個。檔名稱可以使用以下轉義符:

'%d' 本地使用者目錄
'%u' 本地使用者名稱稱
'%l' 本地主機名
'%h' 遠端主機名
'%r' 遠端使用者名稱

可以指定多個金鑰檔案,在連線的過程中會依次嘗試這些金鑰檔案。

Port

指定遠端主機埠號,預設為22。

User

指定登入使用者名稱。

UserKnownHostsFile

指定一個或多個使用者認證主機快取檔案,用來快取通過認證的遠端主機的金鑰,多個檔案用空格分隔。預設快取檔案為: ~/.ssh/known_hosts, ~/.ssh/known_hosts2。

StrictHostKeyChecking

SSH客戶端的StrictHostKeyChecking配置指令,StrictHostKeyChecking=no時可以實現當第一次連線伺服器時自動接受新的公鑰。不再有任何警告出現了。

還有更多引數的介紹,可以通過man ssh_config檢視使用者手冊。

使用示例

使用指定別名登入到www.hi-linux.com這臺主機。

Host www
    HostName www.hi-linux.com
    Port 22
    User root
    IdentityFile  ~/.ssh/id_rsa
    IdentitiesOnly yes
1
$ ssh www

不同主機使用同一私鑰進行登陸。

Host github.com git.coding.net
    HostName %h
    Port 22
    User git
    IdentityFile  ~/.ssh/id_rsa_blog
    IdentitiesOnly yes

$ ssh -T [email protected]
$ ssh -T [email protected]

示例

以下連線為例:

SSH 伺服器: ssh.test.com
埠號: 2200
賬戶: user
金鑰檔案: ~/.ssh/id_rsa_test

##密碼認證登入方式為:

$ ssh -p 2200 -i ~/.ssh/id_rsa_test [email protected]
[email protected]'s password:

##金鑰認證登入方式:

$ ssh-copy-id -i ~/.ssh/id_rsa_test [email protected]
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

$ ssh [email protected]

##使用配置檔案方式

有如下配置檔案:

$ vim ~/.ssh/config
Host sshtest
    HostName ssh.test.com
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa_test

Host ssttest2
    HostName ssh.test2.com
    User user2
    Port 2345
    IdentityFile ~/.ssh/id_rsa_test2

使用配置檔案登入:

$ ssh sshtest