在实际生产环境中,如果需要批量管理和部署服务器,可以采用ssh+key秘钥认证,然后可以免密码进行数据分发,服务部署及管理。

  

SSH服务(TCP端口号22):安全的命令解释器

为客户机提供安全的Shell 环境,用于远程管理

SSH基于公钥加密(非对称加密)技术: 数据加密传输; 客户端和服务器的身份验证;

公钥 和 私钥   是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密;不能根据一个密钥而推算出另外一个密钥;

公钥对外公开,私钥只有私钥的持有人才知道。

      ssh批量分发


首先需要创建公钥私钥,然后将公钥放到client端,私钥留在分发端。

公钥相当于锁,私钥相当于钥匙。

我这里是采用普通用户,root用户认证不建议,存在安全隐患。

ssh-keygen  -t  dsa

[tuwei@backupserver .ssh]# ll

total 8

-rw------- 1 tuwei tuwei 668 Apr 27 13:57 id_dsa

-rw-r--r-- 1 tuwei tuwei 608 Apr 27 13:57 id_dsa.pub

然后将公钥拷贝到其他client端。

ssh-copy-id -i id_dsa.pub tuwei@192.168.1.11:~拷贝到远端的家目录

[tuwei@backupclient .ssh]$ ll

total 4

-rw-------. 1 tuwei tuwei 1216 Apr 30 01:49 authorized_keys

注意:采用ssh-copy-id脚本将公钥拷贝到远端,在远端会生成一个.ssh目录(目录权限为700)。文件权限为600,不能作更改。

做好分发后进行测试,通过ssh连接到远端

[tuwei@backupserver ~]$ ssh tuwei@192.168.1.11

Last login: Mon May  8 10:28:31 2017 from 192.168.1.10

Hi,welcome to the linux learning class

keep on learning

查看远端ip

[tuwei@backupserver ~]$ ssh  tuwei@192.168.1.11  /sbin/ifconfig  eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:41:0C:21  

          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe41:c21/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:16454 errors:0 dropped:0 overruns:0 frame:0

          TX packets:15218 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:1378538 (1.3 MiB)  TX bytes:10704201 (10.2 MiB)

分发数据

 数据分发时需要用到scp、rsync命令,而普通用户没有root权限,可以将普通用户加上sudo,实现root操作。

echo “tuwei  ALL=(ALL)  NOPASSWD:/usr/bin/scp,/usr/bin/rsync,/bin/tar” >>/etc/sudoers

实际生产中可以将要分发数据权限改为普通用户。

chown -R tuwei /tuwei

1.  scp -P22 -r -p /tuwei  tuwei@192.168.1.11:~

 

2.  ssh -t tuwei@192.168.1.11 sudo rsync -azP tuwei /etc

  普通用户对/etc是没有可写权限的,这里采用两步完成分发.或者直接用rsync

  rsync -azP /tuwei  -e 'ssh -p22' tuwei@192.168.1.11:/etc

可以写个通用脚本进行批量管理。

#!/bin/sh

#write by tuwei at 20170501

################get the information of other nodes

PNAME=`basename $0`

print_usage() {

        echo "Usage:"

        echo "/bin/sh $PNAME command"

        exit 1

}


#$1  ip


if [ $# -ne 1 ]; then

 print_usage

fi


for ip in `cat all_client_ips.txt|grep -v ^#`

        

do


        echo "start ip $ip $1  --------------------------"

        ssh -p 22 tuwei@$ip  $1     #########如果是分发, rsync -azP $1 -e 'ssh -p22'  tuwei@$ip:$2

        echo "end $ip  $1    -------------------------------"

        printf "\n"

         

done