第三十天-ssh key企业批量分发自动化管理案例
本文实现一个应用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批量管理工具,特点:简单,功能强大(配置复杂)
本文源自:根据老男孩教育视频整理总结而成