一、基于密钥认证的SSH批量管理原理

二、需求分析
要求所有服务器在同一root系统用户下,实现m01机器从本地分发数据到其他两台机器上,在分发的过程中不需要系统提示输入密码验证,当然,除了分发的功能,还可以批量查看所有客户机上的CPU、LOAD、MEM、系统版本等信息。即实现从m01服务器发布数据到其他客户端服务器以及查看信息的免密码登录验证解决方案。
使用root用户认证,普通用户认证后续学习。
三、部署
在m01端建立Public Key(锁)与Private Key(钥匙)更方便,实际上只需要有一对密钥就可以,在哪个机器上建立都是一样的。
将Public Key比作锁,将Private Key比作钥匙。


四、实践
1、生成密钥
第一种方法:[root@m01~]#ssh-keygen

第二种方法:
一键生成密钥对:
#ssh-keygen -t dsa -P '' -f ~/.ssh/id_rsa >/dev/null 2>&1 #<==??必须还得按回车键??
查看生成的秘钥:
#echo -e "\n"|ssh-keygen -t dsa -N ""
2、发放公钥(锁)
[root@m01~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7
[root@m01~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.8
3、测试
#ssh 172.16.1.7

已经不需要再输入密码了。
五、批量管理服务器
1、编写脚本
[root@m01 ~]# cd /server/scripts/
[root@m01 scripts]# vim view.sh
for n in 7 8
do
echo -------172.16.1.$n----------
ssh 172.16.1.$n $1
done
2、运行脚本
root@m01 scripts]# sh view.sh "cat /etc/redhat-release"

运行脚本,可以传参任意要执行的命令,注意命令有空格时要用引号引起来。
六、分发任意本地数据到所有节点的任意位置
1、编写脚本
[root@m01/server/scripts]#vim fenfa.sh
#!/bin/sh
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "usage:$0 localfile remotedir"
exit 1
fi
for n in 7 8
do
scp -P 22 -rp $1 root@172.16.1.$n:$2 &>/dev/null
if [ $? -eq 0 ]
then
action "172.16.1.$n successful" /bin/true
else
action "172.16.1.$n failure" /bin/false
fi
done
2、测试分发
[root@m01/server/scripts]#sh fenfa.sh ./view.sh /root/

成功。




