在实际生产环境中,如果需要批量管理和部署服务器,可以采用ssh+key秘钥认证,然后可以免密码进行数据分发,服务部署及管理。
SSH服务(TCP端口号22):安全的命令解释器
为客户机提供安全的Shell 环境,用于远程管理
SSH基于公钥加密(非对称加密)技术: 数据加密传输; 客户端和服务器的身份验证;
公钥 和 私钥 是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密;不能根据一个密钥而推算出另外一个密钥;
公钥对外公开,私钥只有私钥的持有人才知道。
ssh批量分发
首先需要创建公钥私钥,然后将公钥放到client端,私钥留在分发端。
公钥相当于锁,私钥相当于钥匙。
我这里是采用普通用户,root用户认证不建议,存在安全隐患。
ssh-keygen -t dsa
[[email protected] .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 [email protected]:~拷贝到远端的家目录
[[email protected] .ssh]$ ll
total 4
-rw-------. 1 tuwei tuwei 1216 Apr 30 01:49 authorized_keys
注意:采用ssh-copy-id脚本将公钥拷贝到远端,在远端会生成一个.ssh目录(目录权限为700)。文件权限为600,不能作更改。
做好分发后进行测试,通过ssh连接到远端
[[email protected] ~]$ ssh [email protected]
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
[[email protected] ~]$ ssh [email protected] /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 [email protected]:~
2. ssh -t [email protected] sudo rsync -azP tuwei /etc
普通用户对/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 [email protected]$ip $1 #########如果是分发,scp -P22 -r -p $1 [email protected]$ip:~
echo "end $ip $1 -------------------------------"
printf "\n"
done