一、产生背景

    在实际工作中,linux集群需要自动化的管理,市面上较常见的自动化运维工具诸如ansible,puppet,saltstack;轻量级的有pssh系列,这其中大多数工具使用的前提就是集群配置有公钥机可免密ssh登录集群内所有服务器,所以要先配置一台公钥机使用。


二、配置实例

    1、在除公钥机外所以服务器生成密钥

[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文件,并修改权限,用以保存所有服务器的公钥

[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文件复制到下一台服务器,并重复以上两个步骤

[root@test .ssh]# scp authorized_keys root@192.168.0.11:~/.ssh/

    4、重复以上步骤,直至最后一台服务器,将authorized_keys文件复制到第一台机器对应目录下

[root@test .ssh]# scp authorized_keys root@192.168.0.1:~/.ssh/
[root@test .ssh]# chmod 600 authorized_keys

    

    5、在第一台机器上将authorized_keys文件复制给所有机器

[root@test ~]# pscp -h serverlist.txt  /root/.ssh/authorized_keys /root/.ssh/authorized_keys


    6、测试互免密ssh登录其他服务器即可


三、脚本实现

[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地址

四、总结

    在不连接外部互联网的特定集群中,公钥机的使用大大方便了运维人员管理维护集群,系统集成人员集成施工的一系列操作;同时,由于公钥机的特殊,要做好公钥机的安全工作。