1. 程式人生 > >SSH-Agent實現多臺機器登陸

SSH-Agent實現多臺機器登陸

學習過程中,我們大概會用到不超過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 都會產生新的程序。