首先编写脚本生成集群服务器列表:

hostsList.sh

#!/bin/bash
preIp="11.11.225."
pwd="dyj2017"
for i in `seq 2 80`;
do
echo -e $preIp$i $pwd >> hostsLists.txt
done

hostsLists.txt

11.11.225.2 dyj2017
11.11.225.3 dyj2017
11.11.225.4 dyj2017
....
11.11.225.78 dyj2017
11.11.225.79 dyj2017
11.11.225.80 dyj2017

sshconfig.sh(CentOS 默认没有启动 ssh 无密登录,去掉 /etc/ssh/sshd_config 其中 2 行的注释,每台服务器都要设置)

#!/bin/bash
echo "读取ip列表中的IP和密码,并进行参数传递"
for row in `cat $1 | awk '{printf("%s:%s:%s\n"),$1,$2,$3}'`
do
ip=`echo ${row} | awk -F ':' '{print $1}'`
passwd=`echo ${row} | awk -F ':' '{print $2}'`
echo $ip
echo $passwd
echo "生成秘钥.........." /usr/bin/expect <<-EOF
spawn scp /etc/ssh/sshd_config cwgl@$ip:/home/cwgl/
expect {
"yes/no" { send "yes\r";exp_continue}
"password: " {send "$passwd\r";exp_continue}
}
exit
EOF /usr/bin/expect <<-EOF
spawn ssh cwgl@$ip
expect "password:"
send "$passwd\r"
expect "cwgl"
send "su - root\r"
expect "Password:"
send "$passwd\r"
expect "*#*"
send "mv -f /home/cwgl/sshd_config /etc/ssh/sshd_config\r"
expect "*#*"
send "systemctl restart sshd\r"
expect "*#*"
exit
EOF done
echo "SSH免密码操作完毕"

sshnoauth.sh(ssh免登陆)

#!/bin/bash
#说明:检查脚本所在服务器是否安装expect模块,生成IP列表中的秘钥
#将生成的秘钥id_rsa.pub传回当前服务器并标记,生成authorized_keys
#并分发到IP列表中的对应所有服务器
#使用方法:./script.sh filename
# ip列表中第一列为IP,第二列为IP对应的用户密码。列与列之间空格隔开
echo "执行检测并安装expect模块"
ep=`rpm -qa | grep expect`
if [ -z $ep ] ; then
echo "检测到当前服务器,没有安装expect模块,准备执行安装"
sleep 2
yum install -y expect
else
echo "当前服务器已经安装expect模块,3秒后,开始执行ssh文件同步"
sleep 3
fi
echo "读取ip列表中的IP和密码,并进行参数传递"
for row in `cat $1 | awk '{printf("%s:%s:%s\n"),$1,$2,$3}'`
do
ip=`echo ${row} | awk -F ':' '{print $1}'`
passwd=`echo ${row} | awk -F ':' '{print $2}'`
echo $ip
echo $passwd
echo "生成秘钥.........." /usr/bin/expect <<-EOF
spawn ssh root@$ip ssh-keygen -t rsa
expect {
"yes/no" { send "yes\r";exp_continue}
"password: " {send "$passwd\r";exp_continue}
"/root/.ssh/id_rsa" {send "\r";exp_continue}
"empty for no passphrase" {send "\r";exp_continue}
"again" {send "\r";exp_continue}
"Overwrite" {send "y\r";exp_continue}
}
exit
EOF
/usr/bin/expect <<-EOF
spawn scp root@$ip:/root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub$ip
expect {
"yes/no" { send "yes\r";exp_continue}
"password: " {send "$passwd\r";exp_continue}
}
EOF
done
#获取本地IP,删除重复秘钥
ip2=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
rm -rf /root/.ssh/id_rsa.pub$ip2
echo "完成获取本地IP,删除重复秘钥操作"
cat /root/.ssh/id_rsa.pub* >> /root/.ssh/authorized_keys
echo "authorized_keys生成完毕"
#scp authorized_keys 文件到各台机器上面。
for row in `cat $1 | awk '{printf("%s:%s:%s\n"),$1,$2,$3}'`
do
ip=`echo ${row} | awk -F ':' '{print $1}'`
passwd=`echo ${row} | awk -F ':' '{print $2}'`
echo "上传分发authorized_keys文件到"$ip"服务器"
/usr/bin/expect <<-EOF
spawn scp /root/.ssh/authorized_keys @$ip:/root/.ssh/
expect {
"yes/no" { send "yes\r";exp_continue}
"password: " {send "$passwd\r";exp_continue}
}
EOF
done
echo "SSH免密码操作完毕"

修改服务器配置文件(值为局部变量)

#!/bin/bash
for row in `cat $1 | awk '{printf("%s:%s\n"),$1,$2}'`
do
ip=`echo ${row} | awk -F ':' '{print $1}'`
echo -e $ip
/usr/bin/expect <<-EOF
spawn ssh root@$ip
expect "*#*"
send "echo -e $ip > /etc/mesos-slave/hostname\r"
expect "*#*"
exit
EOF done

  

Centos 集群配置SSH免登陆脚本的更多相关文章

  1. hadoop集群配置SSH免登陆

    今天给大家总结一下hadoop集群之间免登陆的步骤 node1 ssh node4 1.在node1中生成密钥 [root@node1 ~]# ssh-keygen -t dsa -P '' -f ~ ...

  2. 阿里云3台机器组成集群配置ssh免密码登陆

    1 查询阿里云局网ip 注意:需要配置同一地区同一可用区的机器 才是一个局网 2 配置好hosts文件 3 hostname确认也是正确的 4 生成公钥私钥 三台机器同样操作 ssh-keygen - ...

  3. 二、集群配置SSH免密登录

    一.以3个几点为例,分别为master.slave01.slave02 1.分别生成自己节点密钥对 master: 创建dsa免密代码:ssh-keygen -t dsa -P '' -f ~/.ss ...

  4. Linux2 在Linux(CentOS)上配置SSH免登陆

    前言:      本文主要是我在安装hadoop之前,需要先配置SSH免登陆.通过网上搜索,发现不少类似的资料,但多少都有些小问题,所以结合自己的实践,记录在此,作为参考.如果能帮助到其他人,自然是更 ...

  5. CentOS 6.5配置SSH免密码登录

    centos 系统对权限的设置非常微妙,如果权限设置大了则ssh 拒绝,如果权限小了,则ssh 更是被拒绝(我曾经配置好久没有打通,就是因为权限过大的原因) 参考链接:http://www.linux ...

  6. centos 6.5 配置ssh免登录

    生成密匙: ssh-keygen -t rsa 会生成 id_rsa  id_rsa.pub id_rsa:私匙 id_rsa.pub:公匙 配置当前机器免登录: cp id_rsa.pub auth ...

  7. Linux多个机器配置ssh免登陆

    多机器ssh免密码登录的教程,网上有很多,多的数不过来,但是我的安装过程不是很顺利,因为刚开始使用的是普通的user,虽然配置了sudo权限,但是没有root权限,导致了无论如何配置都不能实现免密码登 ...

  8. Hadoop伪分布式集群实现SSH免密登录

    在启动Hadoop时候报了这样一个错误: Starting namenodes on [hadoop] hadoop: (Permission denied (publickey,gssapi-key ...

  9. Centos下 自动化配置SSH免密码登陆

    hosts文件,存储要部署的节点IP地址,其中以#开头表示注释掉 192.168.101.52 192.168.101.53 192.168.101.54 192.168.101.55 192.168 ...

随机推荐

  1. QT开发之旅四邮件发送工具

    终于有了一个晚上安静的写写程序,最近一直忙着公司商务上的事情,一直想用QT实现一个调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法 ...

  2. rsyslog local0-local7的用法

    很多时候我们需要将一个服务的日志文件导向一个指定的文件,这个时候可以设置log-facility 如在dhcpd.conf中配置 1 : update log-facility in the dhcp ...

  3. 23种设计模式之单例模式(Singleton)

    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法. public class SingleTon { private static Si ...

  4. CListCtrl使用(转)

    CListCtrl使用技巧 以下未经说明,listctrl默认view 风格为report 1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标      LVS_SMALLI ...

  5. 为什么局域网里有ip为10.10.10.1

    10.0.0.1 是私有地址,用来给局域网络分配主机地址的. A类地址 (1)A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. (2)A类地址网络号范围:1.0.0 ...

  6. 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法

    [POJ2888]Magic Bracelet 题意:一个长度为n的项链,有m种颜色的珠子,有k个限制(a,b)表示颜色为a的珠子和颜色为b的珠子不能相邻,求用m种珠子能串成的项链有多少种.如果一个项 ...

  7. ThreadLocal Java并发

    ThreadLocal 文章来源:http://con.zhangjikai.com/ThreadLocal.html ThreadLocal 主要用来提供线程局部变量,也就是变量只对当前线程可见. ...

  8. npm使用报错解决办法

    在使用脚手架工具进行项目搭建的时候,很多时候会用到npm ,最近用npm的时候遇到一个错误: 'CALL "I:\Program Files\nodejs\\node.exe" & ...

  9. Laravel 中的异常处理

    这篇文章里,我们将研究 Laravel 框架中最重要也最少被讨论的功能 -- 异常处理. Laravel 自带了一个异常处理类,它能够让你以简单.优雅的方式 report 和 render 异常. 文 ...

  10. rs.getMetadata

    元数据(MetaData),即定义数据的数据.打个比方,就好像我们要想搜索一首歌(歌本身是数据),而我们可以通过歌名,作者,专辑等信息来搜索,那么这些歌名,作者,专辑等等就是这首歌的元数据.因此数据库 ...