1. 基于密鑰認(rèn)證的SSH批量管理原理
企業(yè)級(jí)SSHD免密碼批量管理企業(yè)項(xiàng)目案例的實(shí)現(xiàn)思想如下圖所示。
2. 項(xiàng)目需求分析
要求所有服務(wù)器在同一root系統(tǒng)用戶下,實(shí)現(xiàn)m01機(jī)器從本地分發(fā)數(shù)據(jù)到其他兩臺(tái)機(jī)器上廊佩,在分發(fā)的過程中不需要系統(tǒng)提示輸入密碼驗(yàn)證,當(dāng)然碎绎,除了分發(fā)的功能略步,還可以批量查看所有客戶機(jī)上的CPU、LOAD盯滚、MEM踢械、系統(tǒng)版本等信息。即實(shí)現(xiàn)從m01服務(wù)器發(fā)布數(shù)據(jù)到其他客戶端服務(wù)器以及查看信息的免密碼登錄驗(yàn)證解決方案魄藕。
3. 項(xiàng)目部署說明
在很多企業(yè)的工作環(huán)境中内列,直接用root用戶進(jìn)行分發(fā)和管理操作,這樣很不安全也很不規(guī)范背率,另外话瞧,如果做安全優(yōu)化時(shí)禁止了root遠(yuǎn)程連接,那么使用root進(jìn)行分發(fā)管理的方法就無用了寝姿,但是使用root做認(rèn)證是非常簡單交排、方便的方案,這里也采取了簡單方便的root用戶免密方案饵筑,使用普通用戶的方案要復(fù)雜很多埃篓。
4. 開始項(xiàng)目部署
因?yàn)閙01服務(wù)器為中心管理服務(wù)器,所以我們選擇在m01端建立Public Key(鎖)與Private Key(鑰匙)更方便根资,實(shí)際上只需要有一對(duì)密鑰就可以架专,在哪個(gè)機(jī)器上建立都是一樣的。
提示:在整個(gè)方案實(shí)現(xiàn)中玄帕,鑰匙(Private Key)和鎖(Public Key)僅需要建立一次即可在任意機(jī)器上執(zhí)行部脚,這里選擇了在m01服務(wù)器生成密鑰對(duì)。
5. 生成密鑰對(duì)
[root@m01 ~]# ssh-keygen
---執(zhí)行該命令生成密鑰桨仿,默認(rèn)是RSA類型密鑰睛低,ssh-keygen是生成密鑰的工具,-t參數(shù)指建立密鑰的類型服傍,默認(rèn)是建立RSA類型密鑰钱雷。也可以執(zhí)行ssh-keygen -t dsa來建立DSA類型密鑰。
---RSA與DSA加密算法的區(qū)別
---RSA吹零,是一種加密算法(PS:RSA也可以進(jìn)行數(shù)字簽名)罩抗,它的簡寫的來由是Ron Rivest、Adi Shamir和Leonard Adleman ---這3個(gè)人姓氏的第一個(gè)字母
---DSA就是數(shù)字簽名算法的英文全稱的簡寫灿椅,即Digital Signature Algorithm
RSA既可以進(jìn)行加密套蒂,也可以進(jìn)行數(shù)字簽名實(shí)現(xiàn)認(rèn)證钞支,而DSA只能用于數(shù)字簽名從而實(shí)現(xiàn)認(rèn)證
Generating public/private rsa key pair. ---一直按回車鍵
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. ---這是Private Key的路徑
Your public key has been saved in /root/.ssh/id_rsa.pub. ---這是Public Key的路徑
The key fingerprint is:
SHA256:z7M+gqsZUUcoYX9o5uzT83SkS3EWAFXRB/APWa419Uc root@m01
The key's randomart image is:
+---[RSA 2048]----+
| o. .ooo.++..E|
| ....o . ..=+|
| .* o . +o=|
| * o . =o|
| . o S . + . .|
| o . o * |
| . o.o B . |
| o...=.= |
| o... o=. |
+----[SHA256]-----+
下面是兩種一鍵非交互式創(chuàng)建密鑰(可以用于自動(dòng)化部署)的方法:
(1)一鍵生成密鑰對(duì)ssh-keygen -t dsa -p '' -f ~/.ssh/id_rsa >/dev/null 2>&1
(2)echo -e "\n"|ssh-keygen -t dsa -N ""
查看生成的密鑰。
[root@m01 ~]# ls -l ~/.ssh/
總用量 12
-rw------- 1 root root 1679 3月 14 12:48 id_rsa ---這是Private Key
-rw-r--r-- 1 root root 390 3月 14 12:48 id_rsa.pub ---這是Public Key
提示:請(qǐng)注意.ssh目錄的權(quán)限為700操刀,另外烁挟,Private Key的id_rsa文件權(quán)限為600,Public Key的id_rsa.pub當(dāng)前文件權(quán)限為644骨坑。其中Private Key的id_rsa文件權(quán)限必須為600撼嗓。
6. 分發(fā)公鑰(鎖)
把公鑰從m01拷貝到WEB01、WEB02服務(wù)器各一份欢唾,ssh-copy-id為系統(tǒng)自帶的Shell腳本且警,可用來分發(fā)公鑰,在m01上執(zhí)行如下命令發(fā)送公鑰:
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.9.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.9.7 (192.168.9.7)' can't be established.
ECDSA key fingerprint is SHA256:lpAQ77XAqJ/27nex4tZvKv8y9craDayqf12ZB9V3QKk.
ECDSA key fingerprint is MD5:c8:94:09:a2:27:8b:92:6f:b7:60:fc:94:bd:f9:14:88.
Are you sure you want to continue connecting (yes/no)? yes
/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
root@192.168.9.7's password:
Number of key(s) added: 1 ---注意這里礁遣,提示添加了一個(gè)新Key
Now try logging into the machine, with: "ssh '192.168.9.7'"
and check to make sure that only the key(s) you wanted were added.
同理執(zhí)行如下命令拷貝公鑰斑芜,過程省略。
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.9.9
此時(shí)通過輸出及登錄Web01及Web02服務(wù)器祟霍,可以看到root用戶家目錄多了一個(gè).ssh目錄杏头,.ssh目錄里增加了一個(gè)文件authorized_keys,那么這個(gè)文件就是改了名字的id_rsa.pub文件沸呐。為什么要改成authorized_keys這個(gè)名字呢大州?因?yàn)槟J(rèn)情況下,SSH的配置文件中默認(rèn)調(diào)用的公鑰路徑為.ssh垂谢,文件名就是authorized_keys。
[root@web01 ~]# grep AuthorizedKeysFile /etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys ---因?yàn)镾SHD配置文件里是authorized_keys名字
[root@web01 ~]# ls -ld ~/.ssh
drwx------ 2 root root 29 3月 14 16:19 /root/.ssh ---注意這里疮茄,.ssh權(quán)限是700
[root@web01 ~]# ls -l ~/.ssh/
總用量 4
-rw------- 1 root root 390 3月 14 16:19 authorized_keys ---公鑰被改成這個(gè)名字了
7. 拷貝SSH密鑰對(duì)
當(dāng)要分發(fā)的節(jié)點(diǎn)機(jī)器有數(shù)百臺(tái)時(shí)滥朱,使用ssh-copy-id就相對(duì)麻煩了,因?yàn)榈谝淮慰截悤r(shí)需要人工輸入密碼力试。解決這個(gè)問題的辦法就是用Shell結(jié)合expect交互式命令或sshpass等命令來實(shí)現(xiàn)徙邻。
8. 遠(yuǎn)程登錄執(zhí)行命令測試
從m01服務(wù)器遠(yuǎn)程連接節(jié)點(diǎn)Web01并執(zhí)行命令測試:
[root@m01 ~]# ssh 192.168.9.7 uptime
16:50:38 up 10:05, 2 users, load average: 2.00, 2.01, 1.98
從上面的結(jié)果中,我們發(fā)現(xiàn)已經(jīng)無須密碼就可以連接節(jié)點(diǎn)Web01執(zhí)行命令了畸裳,連接Web02也是如此缰犁。
9. 實(shí)現(xiàn)批量管理服務(wù)器
[root@m01 ~]# cd /server/scripts/
[root@m01 scripts]# vim view.sh
for n in 7 9
do
echo ------192.168.9.$n------
ssh 192.168.9.$n $1
done
運(yùn)行腳本,可以傳參任意要執(zhí)行的命令怖糊,注意命令有空格時(shí)要用引號(hào)引起來帅容。
[root@m01 scripts]# sh view.sh "cat /etc/redhat-release"
------192.168.9.7------
CentOS Linux release 7.6.1810 (Core)
------192.168.9.9------
CentOS Linux release 7.6.1810 (Core)
如果遇到環(huán)境變量問題,可以調(diào)整環(huán)境變量配置到/etc/bashrc里面伍伤。
這樣一來并徘,即時(shí)有幾百臺(tái)服務(wù)器,也瞬間就可以查看想要的所有服務(wù)器的信息了扰魂。
10. 分發(fā)任意本地?cái)?shù)據(jù)到所有節(jié)點(diǎn)的任意位置
下面以scp命令為例麦乞,并發(fā)Shell腳本實(shí)現(xiàn)批量免密鑰分發(fā)文件蕴茴。
[root@m01 scripts]# cat fenfa.sh
#!/bin/sh
. /etc/init.d/functions ---引入系統(tǒng)函數(shù)庫
if [ $# -ne 2 ] ---參數(shù)不為2被提示幫助
then
echo "usage:$0 localfile remotedir"
exit 1
fi
for n in 7 9 51
do
scp -P 22 -rp $1 root@192.168.9.$n:$2 &>/dev/null
if [ $? -eq 0 ]
then
action "192.168.9.$n successful" /bin/true
else
action "192.168.9.$n failure" /bin/false
fi
done
測試結(jié)果如下:將本地/etc/hosts分發(fā)到其他機(jī)器的/tmp下。
[root@m01 scripts]# sh fenfa.sh /etc/hosts /tmp/
192.168.9.7 successful [ 確定 ]
192.168.9.9 successful [ 確定 ]
192.168.9.51 failure [失敗]
至此姐直,本項(xiàng)目案例大功告成倦淀。