需求:nfs服务器兼做批量分发服务器。backup备份服务器、mb01服务为批量分发的客户端。通过NFS服务器讲编辑好的hosts文件批量分发到备份服务器和mb01服务器的、/etc/下。使内网环境可以使用/etc/hosts 文件做正向、反向的域名解析。

由于root具有最大的权限,所以不建议使用root用户进行SSH免密码登录,而是在所有的机器上建立相同的普通用户,通过普通用户的SSH免密码登录,使用scp 命令将hosts文件分发到客户端的该普通用户的家目录下。在各客户端为该普通用户通过sudocp赋予提权,才能将该用户家目录下收到的分发文件拷贝到/etc/目录下。

 

 

 环境:

mb01批量分发客户端服务器

[root@mb01 ~]# uname -nr

mb01 2.6.32-573.el6.x86_64

[root@mb01 ~]# ifconfig eth1|awk -F"[ :]+" 'NR==2{print $4}'

172.16.1.61

[root@mb01 ~]#

 

 backup 备份服务器

[root@backup ~]# uname -nr

backup 2.6.32-573.el6.x86_64

[root@backup ~]# ifconfig eth1|awk-F "[ :]+" 'NR==2{print $4}'

172.16.1.99

[root@backup ~]#

 

nfs 服务器

[root@nfs ~]# uname -nr

nfs 2.6.32-573.el6.x86_64

[root@nfs ~]# ifconfig eth1|awk -F"[ :]+" 'NR==2 {print $4}'

172.16.1.66

[root@nfs ~]#

 

一、在所有的机器中创建分发用户的普通账户 friendship 并通过 sudo friendship 用户使用cp 命令时进行提权。以下操作均为分发服务器上操作,使用 root 用户 ssh 密码验证执行命令。若服务器禁止了 root 远程登录,则需要使用普通用户登录在切换到root或单独连接各机器进行配置。

############以下可以整合一条命令行这行(全路径###########

 ssh -p 22 root@172.16.1.66"/usr/sbin/useradd friendship&&echo '123456'|/usr/bin/passwd--stdin friendship&&echo 'friendship ALL=(ALL)  NOPASSWD: /bin/cp'>>/etc/sudoers"

 

1、在所有机器上创建用户  friendship

useradd friendship

2、给friendship 设置密码:

echo '123456'|/usr/bin/passwd --stdin friendship

3、对friendship用户 sudo 授权

echo 'friendship ALL=(ALL) NOPASSWD: /bin/cp'>>/etc/sudoers

 

 backup 服务器

[root@mb01 ~]# ssh -p 22 root@172.16.1.99"/usr/sbin/useradd friendship&&echo '123456'|/usr/bin/passwd--stdin friendship&&echo 'friendship ALL=(ALL)  NOPASSWD: /bin/cp'>>/etc/sudoers"

The authenticity of host'172.16.1.99 (172.16.1.99)' can't be established.

RSA key fingerprint is59:90:3c:db:11:3e:99:7a:4f:f6:02:b8:96:ad:4d:f9.

Are you sure you want to continueconnecting (yes/no)? yes

Warning: Permanently added'172.16.1.99' (RSA) to the list of known hosts.

Address 172.16.1.99 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

root@172.16.1.99's password:

Changing password for userfriendship.

 

nfs 服务器

[root@mb01 ~]# ssh -p 22 root@172.16.1.66"/usr/sbin/useradd friendship&&echo '123456'|/usr/bin/passwd--stdin friendship&&echo 'friendship ALL=(ALL)  NOPASSWD: /bin/cp'>>/etc/sudoers"

The authenticity of host'172.16.1.66 (172.16.1.66)' can't be established.

RSA key fingerprint is59:90:3c:db:11:3e:99:7a:4f:f6:02:b8:96:ad:4d:f9.

Are you sure you want to continueconnecting (yes/no)? yes

Warning: Permanently added'172.16.1.66' (RSA) to the list of known hosts.

Address 172.16.1.66 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

root@172.16.1.66's password:

Changing password for userfriendship.

passwd: all authentication tokensupdated successfully.

 

测试

echo $? 返回值都为0 验证成功

 

[root@mb01 ~]# ssh -t -p 22friendship@172.16.1.66 "/bin/echo 'test sudo forfriendship'>~/good.txt&&sudo /bin/cp ~/good.txt /etc/;/bin/echo$?"

Address 172.16.1.66 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

friendship@172.16.1.66's password:

0

Connection to 172.16.1.66 closed.

[root@mb01 ~]#

 

[root@mb01 ~]# ssh -t -p 22friendship@172.16.1.99 "/bin/echo 'test sudo forfriendship'>~/good.txt&&sudo /bin/cp ~/good.txt /etc/;/bin/echo$?"

Address 172.16.1.99 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

friendship@172.16.1.99's password:

0

Connection to 172.16.1.99 closed.

[root@mb01 ~]#

 

 

二、在批量分发服务器上使用 friendship 用户生成密匙对并将公匙发送到各服务器

1、生成密匙对

[friendship@mb01 ~]$ whoami

friendship

[friendship@mb01 ~]$ ssh-keygen -t dsa

Generating public/private dsa keypair.

Enter file in which to save the key(/home/friendship/.ssh/id_dsa):

Created directory'/home/friendship/.ssh'.

Enter passphrase (empty for nopassphrase):

Enter same passphrase again:

Your identification has been savedin /home/friendship/.ssh/id_dsa.

Your public key has been saved in/home/friendship/.ssh/id_dsa.pub.

The key fingerprint is:

64:e4:49:75:74:09:9e:62:77:e2:d0:9b:bc:ff:2a:0bfriendship@mb01

The key's randomart p_w_picpath is:

+--[ DSA 1024]----+

|        o...+... |

|       + . + o. |

|        = + * . |

|       o . * =  |

|        S  =    |

|             .  |

|          E .   |

|           ...  |

|            .ooo.|

+-----------------+

[friendship@mb01 ~]$

 

发送密匙到分发服务器

nfs 服务器

[friendship@mb01 ~]$ ssh-copy-id -i./.ssh/id_dsa.pub  friendship@172.16.1.66

The authenticity of host'172.16.1.66 (172.16.1.66)' can't be established.

RSA key fingerprint is59:90:3c:db:11:3e:99:7a:4f:f6:02:b8:96:ad:4d:f9.

Are you sure you want to continueconnecting (yes/no)? yes

Warning: Permanently added'172.16.1.66' (RSA) to the list of known hosts.

Address 172.16.1.66 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

friendship@172.16.1.66's password:

Now try logging into the machine,with "ssh 'friendship@172.16.1.66'", and check in:

 

 .ssh/authorized_keys

 

to make sure we haven't added extrakeys that you weren't expecting.

 

[friendship@mb01 ~]$

 

backup 服务器

 

[friendship@mb01 ~]$ ssh-copy-id -i./.ssh/id_dsa.pub  friendship@172.16.1.99

The authenticity of host'172.16.1.99 (172.16.1.99)' can't be established.

RSA key fingerprint is59:90:3c:db:11:3e:99:7a:4f:f6:02:b8:96:ad:4d:f9.

Are you sure you want to continueconnecting (yes/no)? yes

Warning: Permanently added'172.16.1.99' (RSA) to the list of known hosts.

Address 172.16.1.99 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

friendship@172.16.1.99's password:

Now try logging into the machine,with "ssh 'friendship@172.16.1.99'", and check in:

 

 .ssh/authorized_keys

 

to make sure we haven't added extrakeys that you weren't expecting.

 

[friendship@mb01 ~]$

 

验证是否能(friendship)用户免密码登陆到各服务器

 

mb01面密码连接到nfs

 

[friendship@mb01 ~]$ ssh friendship@172.16.1.66

Address 172.16.1.66 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

Last login: Sat May  7 05:44:25 2016 from 172.16.1.61

[friendship@nfs ~]$ ls

good.txt

[friendship@nfs ~]$ cat/etc/ssh/sshd_config

cat: /etc/ssh/sshd_config:Permission denied

[friendship@nfs ~]$ tail -2/etc/passwd

tcpdump:x:72:72::/:/sbin/nologin

friendship:x:500:500::/home/friendship:/bin/bash

 

mb01免密码连接到backup

 

[friendship@mb01 ~]$ ssh friendship@172.16.1.99

Address 172.16.1.99 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

Last login: Sat May  7 05:52:00 2016 from 172.16.1.61

[friendship@backup ~]$ ls

good.txt

[friendship@backup ~]$ tail/etc/passwd

dbus:x:81:81:System messagebus:/:/sbin/nologin

vcsa:x:69:69:virtual console memoryowner:/dev:/sbin/nologin

abrt:x:173:173::/etc/abrt:/sbin/nologin

haldaemon:x:68:68:HALdaemon:/:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

saslauth:x:499:76:Saslauthduser:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

friendship:x:500:500::/home/friendship:/bin/bash

[friendship@backup ~]$

 

三、在批量分发服务器mb01 写脚本实现批量分发。使用 friendship 用户

     批量分发hosts 文件

 

1、拷贝一个文件hosts到家目录下  查看hosts内容

 

cp /etc/hosts .

[friendship@mb01 ~]$ cat hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

172.16.1.5      lb01

172.16.1.6      lb02

172.16.1.7      web02

172.16.1.8      web01

172.16.1.51     db01 db01.etiantian.org

172.16.1.31     nfs01

172.16.1.41     backup

172.16.1.61     m01

 

=========20140708==============

[friendship@mb01 ~]$

 

 

 

2、写脚本  vim fenfa.sh

 

#!/bin/sh

 

 

 

for n in 66 99

do

 echo "==172.16.1.$n=="

 scp -P22 hosts 172.16.1.$n:~

done

~

 

 

3、执行脚本

[friendship@mb01 ~]$ /bin/sh fenfa.sh

==172.16.1.66==

Address 172.16.1.66 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

hosts                                                                           100%  384     0.4KB/s  00:00   

==172.16.1.99==

Address 172.16.1.99 maps to bogon,but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

hosts                                                                           100%  384     0.4KB/s  00:00   

fenfa.sh: line 10: /home/friendship:is a directory

fenfa.sh: line 14: command not found

[friendship@mb01 ~]$

 

4、看分发结果

 

nfs服务端

[friendship@nfs ~]$ ls

hosts 

[friendship@nfs ~]$ cat hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

172.16.1.5      lb01

172.16.1.6      lb02

172.16.1.7      web02

172.16.1.8      web01

172.16.1.51     db01 db01.etiantian.org

172.16.1.31     nfs01

172.16.1.41     backup

172.16.1.61     m01

 

 

 

=========20140708==============

[friendship@nfs ~]$

 

 

backup服务端

 

[friendship@backup ~]$ ls

hosts 

[friendship@backup ~]$ cat hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

172.16.1.5      lb01

172.16.1.6      lb02

172.16.1.7      web02

172.16.1.8      web01

172.16.1.51     db01 db01.etiantian.org

172.16.1.31     nfs01

172.16.1.41     backup

172.16.1.61     m01

 

 

 

=========20140708==============

[friendship@backup ~]$

 

 

测试成功已将hosts文件批量分发到指定服务器的家目录下