讓多臺(tái)服務(wù)器之間 SSH 免密登錄,也就是:
A 登錄 B、B 登錄 C 等,不再輸入密碼。
我?guī)湍惴殖扇齻€(gè)階段來(lái)搞定,一步步講得非常清晰??
?? 一、目標(biāo)概念:SSH 免密的原理
當(dāng)你執(zhí)行:
ssh-keygen
它會(huì)生成兩把鑰匙:
| 文件 | 說(shuō)明 |
|---|---|
~/.ssh/id_rsa |
私鑰(留在本機(jī)) |
~/.ssh/id_rsa.pub |
公鑰(發(fā)給目標(biāo)機(jī)) |
然后把本機(jī)的 公鑰內(nèi)容 加進(jìn)目標(biāo)機(jī)的:
~/.ssh/authorized_keys
這樣 SSH 登錄時(shí)系統(tǒng)會(huì)驗(yàn)證密鑰匹配,無(wú)需密碼。
?? 二、單機(jī)免密配置步驟(以 root 為例)
假設(shè)我們有三臺(tái)機(jī)器:
| 主機(jī)名 | IP | 說(shuō)明 |
|---|---|---|
| server01 | 192.168.10.11 | 主控機(jī)(生成密鑰) |
| server02 | 192.168.10.12 | 目標(biāo)機(jī) A |
| server03 | 192.168.10.13 | 目標(biāo)機(jī) B |
1?? 在主控機(jī)(server01)生成 SSH 密鑰
執(zhí)行:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -P ''
解釋?zhuān)?/p>
-
-t rsa:使用 RSA 算法 -
-b 4096:密鑰長(zhǎng)度 -
-f:指定文件路徑 -
-P '':空密碼(非交互式)
生成后會(huì)有兩個(gè)文件:
ls ~/.ssh/id_rsa*
# 輸出:
# ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
2?? 把公鑰分發(fā)給目標(biāo)機(jī)
執(zhí)行以下命令,把公鑰復(fù)制到目標(biāo)服務(wù)器:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.12
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.13
系統(tǒng)會(huì)提示輸入一次密碼,然后自動(dòng)完成公鑰配置。
作用: 會(huì)自動(dòng)將
id_rsa.pub追加進(jìn)/root/.ssh/authorized_keys。
3?? 測(cè)試免密
現(xiàn)在在 server01 上執(zhí)行:
ssh root@192.168.10.12
? 如果直接登錄進(jìn)去了,不再提示輸入密碼,說(shuō)明免密成功。
?? 三、腳本化批量配置(推薦)
如果你要在多臺(tái)機(jī)器之間都打通,可以讓所有機(jī)器互信:
例如:
servers=(192.168.10.11 192.168.10.12 192.168.10.13)
for host in ${servers[@]}; do
echo "=== 配置 ${host} ==="
ssh-keygen -f ~/.ssh/id_rsa -P '' -q || true
ssh-copy-id -i ~/.ssh/id_rsa.pub root@${host}
done
?? 注意:第一次連接每臺(tái)機(jī)器時(shí),會(huì)要求確認(rèn)“yes”,然后輸入一次密碼。
?? 四、檢查權(quán)限(關(guān)鍵)
確保權(quán)限正確,否則免密會(huì)失效:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
?? 五、進(jìn)階技巧(多機(jī)互信)
如果是一個(gè)集群(例如 server01、server02、server03 都要互相免密):
- 在 任意一臺(tái)(比如 server01)生成密鑰;
- 用
ssh-copy-id將公鑰發(fā)給 所有節(jié)點(diǎn)(包括自己); - 在每臺(tái)機(jī)器的
/root/.ssh/authorized_keys都包含相同的公鑰; - 所有節(jié)點(diǎn)間的登錄都會(huì)免密成功。
? 六、完整可執(zhí)行命令總結(jié)
你可以直接復(fù)制執(zhí)行 ??
# 1. 生成密鑰(只需執(zhí)行一次)
ssh-keygen -f ~/.ssh/id_rsa -P ''
# 2. 授權(quán)本機(jī)
grep -f /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys || cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
# 3. 分發(fā)到其他節(jié)點(diǎn)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.12
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.13
# 4. 測(cè)試免密
ssh root@192.168.10.12