(1)生成密钥
(2)将中控机的密钥复制到所有节点(实现中控机访问所有节点)
(3)若要实现所有节点相互免密,将含有所有节点公钥的文件复制到所有节点
以dataxc用户为例,脚本示例如下:
#!/bin/bash
# sshfree.sh
#安装expect,用于自动交互任务
sudo apt-get install -y expect
#要设置免密登录的节点,177为中控机(本机)
nodes=(192.168.10.177 192.168.10.225 192.168.10.226 192.168.10.227)
#登录密码,所有节点一致
passwd=123456
#---中控机免密登录其他节点---
#在所有节点生成秘钥
#如果(yes/no)?则自动选择yes继续下一步,有的版本是(yes/no/[fingerprint])?
#如果password:则自动将passwd写在后面继续下一步
create_key(){
expect -c "set timeout -1;
spawn ssh dataxc@$node ssh-keygen -t rsa -P '' -f /home/dataxc/.ssh/id_rsa;
expect {
*(yes/no* {send -- yes\r;exp_continue;}
*password:* {send -- $passwd\r;exp_continue;}
eof\t{exit 0}
}";
}
ssh_create_key(){
for node in ${nodes[*]}
do
create_key $node $passwd
done
}
ssh_create_key
#将中控机公钥复制到所有节点
#如果(yes/no)?则自动选择yes继续下一步,有的版本是(yes/no/[fingerprint])?
#如果password:则自动将passwd写在后面继续下一步
copy_id(){
expect -c "set timeout -1;
spawn ssh-copy-id dataxc@$node;
expect {
*(yes/no* {send -- yes\r;exp_continue;}
*password:* {send -- $passwd\r;exp_continue;}
eof\t{exit 0}
}";
}
ssh_copy_id(){
for node in ${nodes[*]}
do
copy_id $node $passwd
done
}
ssh_copy_id
#---所有节点相互免密登录---
#将其他节点公钥追加到中控机
for node in ${nodes[*]:1}
do
ssh dataxc@$node cat /home/dataxc/.ssh/id_rsa.pub >> /home/dataxc/.ssh/authorized_keys
done
#将包含所有节点公钥的文件复制到其他节点
for node in ${nodes[*]:1}
do
scp /home/dataxc/.ssh/authorized_keys dataxc@$node:/home/dataxc/.ssh/authorized_keys
done
#end