关于多台虚拟机进行自动化部署的问题汇总(小白做笔记记录之用,大神请绕路~)

首先贴上shell脚本代码(代码的前提条件是

1.首先已经在各台虚拟机上都配置了repo的本地yum软链接,源服务器起名min2

2.通过yum 下载scp软件 (用于跨机器进行文件传输拷贝) yum -y install scp

3.各台机器的/etc/hosts与/etc/sysconfig/network中的IP地址与主机名已配好(否则会出现找不到主机的错误)

以下是 boot.sh文件

#!/bin/bash

SERVERS="min1 min3 min4"
PASSWORD=hadoop
BASE_SERVER=min2

auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send -- yes
;exp_continue;}
            *assword:* {send -- $2
;exp_continue;}
            eof        {exit 0;}
        }";
}

ssh_copy_id_to_all() {
    for SERVER in $SERVERS
    do
        auto_ssh_copy_id $SERVER $PASSWORD
    done
}

ssh_copy_id_to_all


for SERVER in $SERVERS
do
    scp install.sh root@$SERVER:/root
    ssh root@$SERVER /root/install.sh
done

 以下是install.sh文件

#!/bin/bash

BASE_SERVER=min2
yum install -y wget
wget $BASE_SERVER/soft/jdk-7u45-linux-x64.tar.gz
tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin
EOF

运行boot.sh文件  ./boot.sh

我出现了两个问题:

首先,expect(shell脚本中的嵌套命令)命令不存在,下载expect包  yum -y install expect(本地服务器下载即可,其他虚拟机无需下载)

其次,出现

ssh-copy-id:/usr/bin/ssh-copy-id: ERROR: No identities found

这个问题,问题来源是boot.sh文件中的

spawn ssh-copy-id $1;这句代码,查资料后是因为没有生成公钥与私钥

解决办法:

 ssh-keygen

#以上命令等价于 ssh-keygen -t rsa

#-t:指定密钥的类型,默认为SSH-2 的rsa类型;      这个命令,会在/etc/.ssh文件夹下生成id_rsa.pub和id_rsa两个文件

重新运行boot.sh,问题解决!!

 

小白做笔记记录之用,大神请绕路~

 

 

原文地址:https://www.cnblogs.com/fjlcoding/p/9957976.html