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的权限)