SSH-Agent實現多臺機器登陸
阿新 • • 發佈:2018-12-21
學習過程中,我們大概會用到不超過10臺的機器,互相複製公鑰到對方機器上的authorized_keys檔案中即可,這樣就實現了免祕鑰登陸。
但在生產環境下,可能有成百上千臺機器,這種情況下去互相複製公鑰顯然不太現實。不過我們可以使用 ssh-agent 來實現多臺機器的ssh登陸。
ssh-agent
ssh-agent (ssh代理)是一種控制用來儲存公鑰身份驗證所使用的私鑰的程式。
ssh-agent 是一個金鑰管理器,執行ssh-agent以後,使用 ssh-add 將私鑰交給ssh-agent保管,其他程式需要身份驗證的時候可以將驗證申請交給ssh-agent來完成整個認證過程。
首先,如果想要使用 ssh-agent ,我們需要先啟動它:
兩種啟動方式都可以
ssh-agent $SHELL #centos中,預設shell通常為shell
eval `ssh-agent`
而且也不需要另外安裝軟體,系統預設就有該命令:
[[email protected] ~]# ls /usr/bin/ssh-add
/usr/bin/ssh-add
[[email protected] ~]# ls /usr/bin/ssh-agent
/usr/bin/ssh-agent
ssh-add
ssh-agent 是管理多個ssh key的代理,受管理的私鑰通過 ssh-add 來新增,目的是對解密的私鑰進行快取記憶體。
引數:
-D:刪除ssh-agent中的所有金鑰
-d:從ssh-agent中的刪除金鑰
-e pkcs11:刪除PKCS#11共享庫pkcs1提供的鑰匙
-s pkcs11:新增PKCS#11共享庫pkcs1提供的鑰匙
-L:顯示ssh-agent中的公鑰
-l:顯示ssh-agent中的金鑰
-t life:對載入的金鑰設定超時時間,超時ssh-agent將自動解除安裝金鑰 -X:對ssh-agent進行解鎖
-x:對ssh-agent進行加鎖
- 把專有金鑰新增到 ssh-agent 中
ssh-add ~./ssh/id_dsa
- 從 ssh-agent 中刪除金鑰
ssh-add -d ./ssh/id_xxx.pub
- 檢視 ssh-agent 中的金鑰
ssh-add -l
舉例
現在有server1、server2、server3三臺機器,其中server1已經可以免祕鑰登陸server2和server3,但server2和server3之間無法通過ssh登陸。
[[email protected] ~]# ssh server2
Last login: Mon Nov 26 09:36:44 2018 from server1
[[email protected] ~]# ssh server3
Last login: Mon Nov 26 09:37:25 2018 from server1
[[email protected] ~]# ssh server3
[email protected]'s password: #提示密碼登陸
[[email protected] ~]# ssh server2
[email protected]'s password: #提示密碼登陸
- 編輯配置檔案:
[[email protected] ~]# vim /etc/ssh/sshd_config #做下面更改
AllowAgentForwarding yes
- 啟動 ssh-agent 服務:
[[email protected] ~]# ssh-agent bash
[[email protected] ~]# ps aux |grep ssh-agent
root 24338 0.0 0.0 51416 580 ? Ss 02:43 0:00 ssh-agent
root 24388 0.0 0.0 51416 1032 ? Ss 02:44 0:00 ssh-agent bash
- 新增私鑰:
[[email protected] ~]# ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
- 測試登陸:
[[email protected] ~]# ssh -A server2 #這裡 -A 不可省略,表示開啟認證代理連線轉發功能
Last login: Mon Nov 26 09:36:58 2018 from server1
[[email protected] ~]# ssh server3 #後面這裡 -A可以省略
Last login: Mon Nov 26 09:37:28 2018 from server1
[[email protected] ~]# logout
Connection to server3 closed.
[[email protected] ~]# logout
Connection to server2 closed.
這樣,通過 ssh-agent 就可以實現一臺機器上直接登入多臺機器,而不需要繁瑣的輸入密碼及配置金鑰的操作。
實際上,我們還需要一個指令碼來實現 ssh-agent 的自動啟動
[[email protected] ~]#cat /etc/profile.d/ssh-agent.sh
#!/bin/sh
if [ -f ~/.agent.env ]; then
. ~/.agent.env >/dev/null
if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then
echo "Stale agent file found. Generating new agent..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi
else
echo "Starting ssh-agent..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi
這樣就不會生成太多的 ssh-agent 程式了,以免每次開啟 ssh-agent 都會產生新的程序。