一、产生背景
在实际工作中,linux集群需要自动化的管理,市面上较常见的自动化运维工具诸如ansible,puppet,saltstack;轻量级的有pssh系列,这其中大多数工具使用的前提就是集群配置有公钥机可免密ssh登录集群内所有服务器,所以要先配置一台公钥机使用。
二、配置实例
1、在除公钥机外所以服务器生成密钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
[root@ test ~] # cd /root/.ssh/
[root@ test . ssh ] # ll
总用量 4 -rw-r--r--. 1 root root 396 11月 1 2016 known_hosts [root@ test . ssh ] # ssh-keygen -t rsa
Generating public /private rsa key pair.
Enter file in which to save the key ( /root/ . ssh /id_rsa ):
Enter passphrase (empty for no passphrase):
Enter same passphrase again: Your identification has been saved in /root/ . ssh /id_rsa .
Your public key has been saved in /root/ . ssh /id_rsa .pub.
The key fingerprint is: SHA256:cBjbvfy9VkWLQpJESgqLHeq923mm4EF1Vb1L4wGs0IU root@ test
The key's randomart image is: +---[RSA 2048]----+ | o ..++*o. | | + + o*oE + . .| | o o o+o+ = . o..| |. . . .o o o * ..| | . o S o + + .| | . . . + .| | + . .. | | . = .o .. | | o ++ .. | +----[SHA256]-----+ [root@ test . ssh ] #
[root@ test . ssh ] # ll
总用量 12 -rw-------. 1 root root 1679 11月 2 11:43 id_rsa -rw-r--r--. 1 root root 391 11月 2 11:43 id_rsa.pub -rw-r--r--. 1 root root 396 11月 1 2016 known_hosts |
2、在第一台服务器上创建authorized_keys文件,并修改权限,用以保存所有服务器的公钥
1
2
3
|
[root@ test . ssh ] # touch authorized_keys
[root@ test . ssh ] # chmod 600 authorized_keys
[root@ test . ssh ] # cat id_rsa.pub >> authorized_keys
|
3、将authorized_keys文件复制到下一台服务器,并重复以上两个步骤
1
|
[root@ test . ssh ] # scp authorized_keys root@192.168.0.11:~/.ssh/
|
4、重复以上步骤,直至最后一台服务器,将authorized_keys文件复制到公钥机对应目录下
1
2
|
[root@ test . ssh ] # scp authorized_keys root@192.168.0.1:~/.ssh/
[root@ test . ssh ] # chmod 600 authorized_keys
|
5、配置自动化运维工具配置文件,并删除除公钥机外的所有机器中的authorized_keys文件(pssh为例)
1
|
[root@ test ~] # pssh -h serverlist.txt -P -p1 "rm -rf /root/.ssh/authorized_keys"
|
6、测试公钥机免密ssh登录其他服务器即可
三、脚本实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@Nginx bin] # yum install expect -y
[root@Nginx bin] # find / -name expect
/usr/bin/expect [root@Nginx bin] # touch /root/.ssh/authorized_keys
[root@Nginx bin] # vim self_ssh.sh
1 #!/usr/bin/expect -f
2 #
3 set timeout 3
4 set ip_list [ open /home/jiayimeng/bin/ip r]
5 while { [gets $ip_list line ]>=0 } {
6 set ip [lindex $line 0]
7 spawn ssh root@$ip
8 expect "*yes/no:" { send "yes\r" }
9 expect "*password:" { send "123456\r" }
10 expect "#"
11 send "cat /root/.ssh/id_rsa.pub | ssh root@192.168.3.25 'cat >> .ssh/authorized_keys'\r"
12 expect "*password:" { send "123456\r" }
13 expect "#" { send "exit\r" }
14 interact
15 }
ip中写明所有机器的ip地址
|
四、总结
在不连接外部互联网的特定集群中,公钥机的使用大大方便了运维人员管理维护集群,系统集成人员集成施工的一系列操作;同时,由于公钥机的特殊,要做好公钥机的安全工作。
本文转自 元婴期 51CTO博客,原文链接:http://blog.51cto.com/jiayimeng/1978370