您的位置:首页 > 其它

第三十天-ssh key企业批量分发自动化管理案例

2015-12-19 09:34 471 查看
本文实现一个应用ssh key 批量分发案例

目录

  一、ssh key 原理及案例原理简图

    1、ssh key 简介

    2、rsa和dsa区别

    3、ssh-copy-id的特殊应用

    4、ssh-copy-id的原理

    5、案例简图

  二、操作步骤

  三、具体实现步骤

    服务端A:

    客户端B:

    客户端C:

  四、ssh 批量分发与管理方案小结

  五、企业级生产场景批量管理,自动化管理方案

一、ssh key 原理及案例原理简图

1、ssh key 简介

  特别提示:在整个方案实现中,公钥(public key)和私钥(private key)仅需要建立一对即可,可以在A、B、C任意机器上来执行,本文选择在A服务器来生成密钥对。
  ssh-kengen -t dsa 中的-t参数指建立密钥的类型,这里指建立的dsa类型,也可以执行  

  ssh-kengen -t rsa 建立的是rsa类型
2、rsa和dsa区别:
  rsa:是一种加密算法,是由Ron Rivest、Adi Shamir和Leonard Adleman这三个人的名字的第一个字母连接起来的。
  dsa:就是数字签名算法的英文全称的简写,即Digital Signature Algorithm
  rsa既可以进行加密,也可以进行数字签名实现认证,而dsa只能用于数字签名从而实现认证。
  -t type
  指定要创建的密钥类型,可以使用"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

  ~/.ssh/identity 该用户默认的RSA身份认证私钥,此文件的权限应当至少限制为"600"
  ~/.ssh/identity.pub 该用户默认RSA身份认证公钥。此文件无需保密。
此文件的内容应该添加到所有RSA的目标主机~/.ssh/authorized_keys文件中
3、ssh-copy-id的特殊应用
  如果ssh 修改了特殊端口,如52113,那么,在用ssh-copy-id命令时,需要指定端口,操作命令如下:
  ssh-copy-id id_dsa.pub "-p 52113 oldboy@10.0.0.142" #-->特殊端口分发,要加引号。

4、ssh-copy-id的原理
  就是把.ssh/id_dsa.pub复制到10.0.0.8下面.ssh目录(提前创建权限700)下,并做了更改名字的操作,名字改为authorized_keys,权限为600

5、案例简图



二、操作步骤:
  1、打开3台虚拟机,A,B,C,在每台虚拟机上添加用户oldboy,并设置用户密码123456
  2、在其中一台虚拟机A中切换到建立的用户oldboy下,建立密钥对。
   命令为:ssh-keygen -t dsa, 一直回车即可
  3、在A中分别执行
   ssh-copy-id .ssh/id_dsa.pub oldboy@B
   ssh-copy-id .ssh/id_dsa.pub oldboy@C
  4、在A服务器的oldboy用户下,测试A到B,A到C是否ok,免密码验证。

三、具体实现步骤

服务端A:

[oldboy@A ~]$ ifconfig |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.1.110
[xiaorui@lrz ~]$ sudo su -
[sudo] password for xiaorui:
[root@lrz ~]# hostname A
[root@lrz ~]# logout
[xiaorui@lrz ~]$ sudo su -
[root@A ~]# useradd oldboy
[root@A ~]# su - oldboy
[oldboy@A ~]$


1、生成一对密钥

[oldboy@A ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oldboy/.ssh/id_dsa):
Created directory '/home/oldboy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oldboy/.ssh/id_dsa.
Your public key has been saved in /home/oldboy/.ssh/id_dsa.pub.
The key fingerprint is:
ef:42:23:fb:5e:dc:24:38:d9:2c:cd:24:48:a6:25:c6 oldboy@A
The key's randomart image is:
+--[ DSA 1024]----+
|   .o +          |
|   .E* .         |
|    . . . .      |
|         X       |
|        S * .    |
|      . o= +     |
|       + .+ .    |
|      . .o       |
|       oo..      |
+-----------------+


2、拷贝公钥到客户端

[oldboy@A ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub oldboy@192.168.1.113
oldboy@192.168.1.113's password:
Now try logging into the machine, with "ssh 'oldboy@192.168.1.113'", and check in:

.ssh/authorized_keys

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

[oldboy@A ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub oldboy@192.168.1.114
The authenticity of host '192.168.1.114 (192.168.1.114)' can't be established.
RSA key fingerprint is e2:93:c3:1f:ad:27:c6:38:a0:49:8a:dc:cf:53:d3:74.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.114' (RSA) to the list of known hosts.
oldboy@192.168.1.114's password:
Now try logging into the machine, with "ssh 'oldboy@192.168.1.114'", and check in:

.ssh/authorized_keys

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


3、创建测试文件并分发

[oldboy@A ~]$ touch test.txt
[oldboy@A ~]$ echo 123 >test.txt
[oldboy@A ~]$ cat test.txt
123
[oldboy@A ~]$ scp test.txt oldboy@192.168.1.113:~
test.txt                                                                                                      100%    4     0.0KB/s   00:00
[oldboy@A ~]$ scp test.txt oldboy@192.168.1.114:~
test.txt                                                                                                      100%    4     0.0KB/s   00:00
在客户端查看:
[oldboy@B ~]$ ls
test.txt
编写分发脚本:
[oldboy@A ~]$ vim fenfa.sh
[oldboy@A ~]$ chmod +x fenfa.sh
[oldboy@A ~]$ sh fenfa.sh
Usage:scp .....
[oldboy@A ~]$ sh fenfa.sh test.txt /home/oldboy
test.txt                                                                                                      100%    4     0.0KB/s   00:00
test.txt                                                                                                      100%    4     0.0KB/s   00:00
[oldboy@A ~]$ cat fenfa.sh
#!/bin/sh

if [ $# -ne 2 ]
then
echo "Usage:scp ....."
exit 1
fi

for n in 113 114
do
scp $1 oldboy@192.168.1.$n:$2
done

exit 0
更专业的脚本:
[oldboy@A ~]$ cat fenfa.sh
#!/bin/sh

file="$1"
remotedir="$2"
. /etc/init.d/functions

if [ $# -ne 2 ]
then
echo "Usage:/bin/sh $0 arg1 arg2"
exit 1
fi

for n in 113 114
do
scp -rp $file oldboy@192.168.1.$n:$2 >/dev/null 2>&1
if [ $? -eq 0 ]
then
action "scp $file to $remotedir is ok" /bin/true
else
action "scp $file to $remotedir is fail" /bin/false
fi
done

exit 0
实施效果:
[oldboy@A ~]$ sh fenfa.sh test.txt /home/oldboy/
scp test.txt to /home/oldboy/ is ok                        [  OK  ]
scp test.txt to /home/oldboy/ is ok                        [  OK  ]


客户端B:

[oldboy@B ~]$ ifconfig |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.1.113
[xiaorui@lrz ~]$ sudo su -
[sudo] password for xiaorui:
[root@lrz ~]# hostname B
[root@lrz ~]# hostname
B
[root@lrz ~]# logout
[xiaorui@lrz ~]$ sudo su -
[root@B ~]# useradd oldboy
[root@B ~]# su - oldboy
[oldboy@B ~]$


客户端C:

[oldboy@C ~]$ ifconfig |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.1.114
[xiaorui@lrz ~]$ sudo su -
[sudo] password for xiaorui:
[root@lrz ~]# hostname C
[root@lrz ~]# hostname
C
[root@lrz ~]# logout
[xiaorui@lrz ~]$ sudo su -
[root@C ~]# useradd oldboy
[root@C ~]# su - oldboy
[oldboy@C ~]$


四、ssh 批量分发与管理方案小结:
  1、利用root做ssh key验证。
  优点:简单、易用
   缺点:安全差,同时无法禁止root远程连接。
  2、利用普通用户来做,思路是先把分发的文件拷贝到服务器用户家目录,然后sudo提权拷贝到服务器的指定目录。
   优点:安全
   缺点:配置复杂。
  3、拓展:同方案2,只是不用sudo,而是设置suid对固定命令提权。
   优点:相对安全
   缺点:复杂,安全性较差,任何人都可以处理带有suid权限命令

五、企业级生产场景批量管理,自动化管理方案:
  1、最简单最常用ssh key,功能最强大的,一般中小型企业会用,50-100台服务器
  2、sina cfengine较早的批量管理工具,现在基本没有企业用
  3、门户级别比较流行的,puppet批量管理工具,复杂,笨重
  4、saltstack批量管理工具,特点:简单,功能强大(配置复杂)

本文源自:根据老男孩教育视频整理总结而成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: