您的位置:首页 > 运维架构 > Linux

用expect解决批量Linux集群机器间SSH免密码访问

2014-05-04 20:37 676 查看
转自:http://blog.csdn.net/aichaoguy/article/details/11693269
#!/bin/bash

#check whether package 'expect' is installed.
if rpm -q expect
then echo "Good">/dev/null
else echo "You Must install package \'expect\'"; exit 0
fi

#开始产生exp文件
cat >/tmp/auto.tcl<<eof

#!/usr/bin/expect -f
set timeout -1
set host [lrange \$argv 0 0]

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@\$host
expect "*connecting*"
send "yes\r"
expect "*?assword:"
send "12341234\r"
expect eof
eof

chmod 755 /tmp/auto.tcl

rm -f /root/.ssh/known_hosts
for hostname in `cat cluster`; do
expect -f /tmp/auto.tcl $hostname;
echo "********$hostname*********">> ssh_copy_id.log;
done


很好的解决了新装Linux机器互相之间需要设置SSH无密码访问(ssh-copy-id)的问题(前提是已经用ssh-keygen产生了公钥私钥)。

这只是expect的一个应用,除此之外,exp也可以用在很多需要机器代替人为交互的地方。

用法:

1,得到所有机器的IP地址(这是必须),最好拿到机器名与IP地址的对应(至少应该有一台机器的hosts有)。

2,如果都是IP地址,那就用IP地址好了,一行一个IP存到一个文件里面,就是代码中的 cluster文件;然后从任一机器处,执行此脚本,执行完毕时得到了该机器与所有机器的单项连接。

3,单向连接既然有了,通过此单向连接,控制其他所有机器运行此脚本即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: