利用 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