應用場景
當你搭建linux叢集環境的時候,從一個節點登入到另一個節點,通過ssh方式,每次登入跳轉都需要輸入密碼,這樣造成非常不便,其實可以通過配置SSH互信,來實作叢集節點間的免密碼登入跳轉。
功能簡介
公鑰認證的基本思想: 對資訊的加密和解密采用不同的key,這對key分别稱作private key和public key,其中,public key存放在欲登入的伺服器上,而private key為特定的客戶機所持有。當客戶機向伺服器發出建立安全連接配接的請求時,首先發送自己的public key,如果這個public key是被伺服器所允許的,伺服器就發送一個經過public key加密的随機資料給客戶機,這個資料隻能通過private key解密,客戶機将解密後的資訊發還給伺服器,伺服器驗證正确後即确認客戶機是可信任的,進而建立起一條安全的資訊通道。通過這種方式,客戶機不需要向外發送自己的身份标志“private key”即可達到校驗的目的,并且private key是不能通過public key反向推斷出來的。這避免了網絡竊聽可能造成的密碼洩露。客戶機需要小心的儲存自己的private key,以免被其他人竊取,一旦這樣的事情發生,就需要各伺服器更換受信的public key清單。
簡言之,當我們在搭建叢集過程中,在叢集中機器間互相通信的時候,會不斷的提示你輸入通信機器的密碼,然而當我們建立起叢集間的ssh互信後,任意兩台機器之間可以無密碼的友善通信。
核心思想
- 配置ssh互信的核心思想如下:
- 首先,在要配置互信的機器上,生成各自的經過認證的key檔案;
- 其次,将所有的key檔案彙總到一個總的認證檔案中;
- 将這個包含了所有互信機器認證key的認證檔案,分發到各個機器中去;
- 驗證互信。
操作步驟
在主機名為mgm,data1,data2,data3,sql1,sql2的節點間建立ssh互信。
1. 建立公鑰秘鑰
在每個節點上建立 RSA密鑰和公鑰,輸入如下指令,一路回車
mkdir ~/.ssh (如果目錄存在,就不必要建立)
chmod 700 ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
2. 修改hosts檔案
在整合公鑰之前我們需要修改mgm的hosts檔案。
在mgm節點輸入指令:
并添加下圖中的資訊
vim /etc/hosts
3. 整合公鑰檔案
# 在mgm節點上執行以下指令:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh data1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh data2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh data3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sql1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sql2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4. 分發整合後的公鑰檔案
# 在mgm節點上執行以下指令
scp ~/.ssh/authorized_keys data1:~/.ssh/
scp ~/.ssh/authorized_keys data2:~/.ssh/
scp ~/.ssh/authorized_keys data3:~/.ssh/
scp ~/.ssh/authorized_keys sql1:~/.ssh/
scp ~/.ssh/authorized_keys sql2:~/.ssh/
5. 分發hosts檔案
# 然後我們需要将我們在mgm節點上配置的hosts檔案分發到所有的節點上:
# 我們在mgm節點上輸入如下指令:
scp /etc/hosts data1:/etc
scp /etc/hosts data2:/etc
scp /etc/hosts data3:/etc
scp /etc/hosts sql1:/etc
scp /etc/hosts sql2:/etc
6. 測試ssh互信
# 在各個節點上運作以下指令,若不需要輸入密碼就顯示系統目前日期,就說明SSH互信已經配置成功了。
在mgm節點上輸入以下指令:
ssh data1 date
ssh data2 date
ssh data3 date
ssh sql1 date
ssh sql2 date
# 然後分别對data1 data2 data3 sql1 sql2節點分别輸入以下指令:
ssh data1 date
ssh data2 date
ssh data3 date
ssh sql1 date
ssh sql2 date
ssh mgm date