功能:实现多台linux主机之间root用户的免密设置
主机名:node101~node106
在node101上切换至root用户,编写以下脚本内容:
#!/bin/bash
#使用root用户
#在node101上创建秘钥,默认生成路径为:/root/.ssh/
ssh-keygen #在.ssh/ 下生成文件:id_rsa(密钥/私钥),id_rsa.pub(公钥),known_hosts(已知的主机)
ssh-copy-id root@node101 #公钥发送,在目标主机的.ssh/下生成authorized_keys文件,同时将id_rsa.pub中的内容复制到该文件中。
array=(102 103 104 105 106)
for (( i=0;i<${#array[*]};i++ ))
do
#分别在主机node102~node106上创建rsa加密
ssh node${array[i]} ssh-keygen #此处生成的id_rsa及id_rsa.pub文件在主机node${array[i]}上,known_hosts文件在node101上
#先将各主机上id_rsa.pub中的内容拷贝到node101的id_rsa1.pub文件中。(每次拷贝都会覆盖原有的内容)
scp root@node${array[i]}:/root/.ssh/id_rsa.pub /root/.ssh/id_rsa1.pub
#再将上面拷贝的内容添加至node101的authorized_keys(在原有内容下面添加,不会覆盖原有内容)
cat /root/.ssh/id_rsa1.pub >> /root/.ssh/authorized_keys
done
for (( i=0;i<${#array[*]};i++ ))
do
#将node101上 含有主机node101~node106公钥的文件authorized_keys 发送至主机node102~node106
scp /root/.ssh/authorized_keys root@node${array[i]}:/root/.ssh/authorized_keys
done
#若删除文件authorized_keys,则免密设置失效。
注意事项:
1、ssh-keygen命令默认实现rsa加密,与命令“ssh-keygen -t rsa”功能相同。
2、本文中使用ssh-keygen命令后出现以下3个问题时,全都直接按“Enter”键:
①Enter file in which to save the key (/root/.ssh/id_rsa):
②Enter passphrase (empty for no passphrase):
③Enter same passphrase again:
其中,①是秘钥保存的路径;
②是密码,本文为免密设置,直接按“Enter”键;也可以自行设置密码。
3、ssh-copy-id命令可以将authorized_keys文件发给自己(如脚本中的ssh-copy-id root@node101),也可以发送至其他主机(例如:ssh-copy-id root@node102)。
【本文在代码第12行后,如果使用命令“ssh node${array[i]} ssh-copy-id root@node101”,会报错“Permission denied”,原因可能是 默认生成的 .ssh目录权限为700,在node101上执行该命令 访问node${array[i]}的.ssh目录下的内容 就会导致权限不足。
解决办法(未验证其可行性):在第12行命令后先添加命令“ssh node${array[i]} chmod 777 /root/.ssh”。
由于以上原因,在该脚本使用了scp及cat命令(第14、16行) 实现将所有的公钥存放到node101的authorized_keys文件中。】