1,安装expect环境:
expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装
下载:expect-5.43.0.tar和tcl8.4.11-src.tar
下载地址:https://pan.baidu.com/s/1i5tOrXz
提取密码:akey
将expect和tcl的软件包下载放到/usr/local/src目录下
(1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装
[root@xw4 src]# tar -zvxf tcl8.4.11-src.tar.gz
[root@xw4 src]# cd tcl8.4.11/unix
[root@xw4 unix]# ./configure
[root@xw4 unix]# make && make install
(2)安装expect
[root@xw4 src]# tar -zvxf expect-5.43.0.tar.gz
[root@xw4 src]# cd expect-5.43.0
[root@xw4 expect-5.43.0]# ./configure --with-tclinclude=/usr/local/src/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
[root@xw4 expect-5.43.0]# make && make install
( 3 ) 安装完成后进行测试
[root@xw4 ~]# expect
expect1.1>
expect1.1>
2,在主节点生成公钥和私钥;
ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3,使用expect写一个自动化部署重当前机器到集群无秘钥登录脚本(setPub.sh):
#!/bin/bash
PASSWORD="123456";
HOSTFILEPATH="./hostlist";
auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all(){
cat $HOSTFILEPATH | while read i
do
auto_ssh_copy_id $i $PASSWORD
done
}
ssh_copy_id_to_all
执行该脚本之前需要先配置好一个hostlist的集群主机列表文件,并给参数HOSTFILEPATH赋值:
如hostlist文件内容:
node1
node2
node3