#!/bin/bash
set -e 

BASE=$(grep -E 'BASE' ./ai.config|cut -d'=' -f2)
if [[ -f /usr/bin/expect ]];then
  logger warn "expect is already installed!"
else
  #安装expect
  if [[ `cat /etc/os-release` =~ CentOS ]];then
    tar zxf "$BASE/down/centos-rpm-packages/expect-rpm-packages.tar.gz" -C "$BASE/down/centos-rpm-packages"
    rpm -ivh --force --nodeps $BASE/down/centos-rpm-packages/expect-rpm-packages/*
  else
    #tar zxf "$BASE/down/ubuntu-deb-packages/expect-deb-packages.tar.gz" -C "$BASE/down/ubuntu-deb-packages"
    #dpkg -i $BASE/down/ubuntu-deb-packages/expect-deb-packages/*
    apt install expect -y
  fi
fi

logger debug "配置免密码登录!"
#从配置文件获取服务器IP和密码
serverIPs=$(grep -E 'MGR_NODE_IP|COMPUTE_NODE_IP|HARBOR_NODE_IP' $BASE/ai.config |cut -d'=' -f2|awk '!($1 in IP){IP[$1];print $1}')
serverPassword=$(grep -r 'SERVER_PASSWORD' $BASE/ai.config)
serverPassword=${serverPassword#*=}
sshPort=$(grep -r 'SSH_PORT' $BASE/ai.config |cut -d'=' -f2|awk '{print $1}')

#生成密钥
if [[ ! -f /root/.ssh/id_rsa.pub ]];then
  ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
fi

#将生成的密钥发送至目标服务器,自动输入yes和密码
auto_ssh_copy_id() {
  expect -c "set timeout -1
  spawn ssh-copy-id -p $sshPort $1
  expect {
    *yes/no* {send -- yes\r;exp_continue;}
    *password:* {send -- $2\r;exp_continue;}
    eof        {exit 0;}
  }"
}
#遍历需要发送密钥的服务器
ssh_copy_id_to_all(){
  for serverIP in $serverIPs
  do
    auto_ssh_copy_id $serverIP $serverPassword
  done
}
ssh_copy_id_to_all 
