ssh批量分发:
在nfs-server服务器(分发机)上产生秘钥:(创建一个新用户liming)
ssh-keygen -t dsa (/home/liming/.ssh/id_dsa 该目录存放着生成的秘钥)
[liming@nfs-server ~]$ ls -l .ssh/
total 8
-rw-------. 1 liming liming 668 Dec 2 15:44 id_dsa (钥匙)
-rw-r--r--. 1 liming liming 608 Dec 2 15:44 id_dsa.pub (锁)
default port: (将锁发送给其他默认端口的服务器)
ssh-copy-id -i .ssh/id_dsa.pub liming@backup-server
port:52113 (将锁分发给其他指定该端口的服务器)
ssh-copy-id -i id_dsa.pub "-p 52113 liming@10.0.0.142"
其他服务器也是如此操作,秘钥认证之后,nfs服务器这时候到back,lamp,lnmp服务器都不用密码了.
(例:此时从nfs看back服务器的网卡<liming用户>: ssh -p22 liming@backup-server
/sbin/ifconfig ens33)
然后分发文件:
scp -P22 hosts liming@backup-server:~ (将本地的hosts文件传到 back服务器的家目录下)
批量分发:(在nfs服务器写脚本)
优化ssh配置文件:/etc/ssh/sshd_config (如果ssh传输慢)
加入:
PermitRootLogin no
PermitEmptyPasswords no
UseDNS no
GSSAPIAuthentication no
vim fenfa.sh
#!/bin/bash
. /etc/init.d/functions #调用函数库(下面action的使用)
#如果没有参数,做出判断并给出提示:
if [ $# -ne 1 ]
then
echo "USAGE:$0 {FILENAME|DIRNAME}"
exit 1
fi
for n in backup-server lamp01 lnmp02
do
scp -P22 -r $1 liming@$n:~ &>/dev/null
if [ $? -eq 0 ]
then
action "fenfa $1 ok" /bin/true
else
action "fenfa $1 ok" /bin/false
fi
done
~
测试:
sh fenfa.sh hosts
vim view.sh
#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 1 ]
then
echo "USAGE:$0 COMMAND"
exit 1
fi
for n in backup-server lamp01 lnmp02
do
echo ========$n========
ssh -P22 liming@$n $1
done
测试:
sh view.sh "/sbin/ifconfig ens33"
sh view.sh "cat /etc/redhat-release"
SSH批量分发与管理方案小结:
1.利用root做ssh key验证.
优点:简单,易用
缺点:安全差,同时无法禁止root远程连接这个功能
企业应用:80%的中小企业
2.利用普通用户如liming来做
思路是:先把分发的文件拷贝到服务器用户家目录,然后sudo提权拷贝分发的文件到远端服务器的对应
权限目录
优点:安全,无需停止root远程连接这个功能.
缺点:配置比较复杂.
3.拓展:同2,只是不用sudo,而是设置suid对固定命令
优点:相对安全
缺点:复杂,安全性价差.任何人都可以处理带有SUID权限的命令
建议: 追求简单,选1
追求安全建议,选2
有能力,可以选择puppet,saltstack.
用第二种方法测试:
所有的机器给liming用户添加权限:
echo "liming ALL=(ALL) NOPASSWD:/usr/bin/rsync" >> /etc/sudoers
visudo -c
grep liming /etc/sudoers
在nfs分发机上,将fenfa.sh 复制出来fenfa_good.sh vim fenfa_good.sh
#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "USAGE:$0 localfile remotedir"
exit 1
fi
for n in backup-server lamp01 lnmp02
do
scp -P22 $1 liming@$n:~ &>/dev/null &&\
ssh -t liming@$n sudo rsync $1 $2 >/dev/null 2>&1
if [ $? -eq 0 ]
then
action "fenfa $1 ok" /bin/true
else
action "fenfa $1 ok" /bin/false
fi
done
sh fenfa_good.sh hosts /etc (测试:将本地的hosts文件同步到各个服务器/etc目录下的hosts文件当中)
sh fenfa_good.sh inotify.sh /server/scripts (将本地的inotify.sh脚本分发到个服务器的脚本目录下)
suid权限方法测试:
将上述的liming的sudo权限给注册掉.就分发不了了
which rsync
chmod 4755 /usr/bin/rsync (这样任何用户使用rsync命令都有root的权限)