mirror of https://github.com/easzlab/kubeasz.git
79 lines
1.7 KiB
Bash
79 lines
1.7 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
#set -x
|
||
|
|
||
|
# check args count
|
||
|
if test $# -ne 3; then
|
||
|
echo -e "\nUsage: $0 < hosts file > < username > < password >\n"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# check hosts file
|
||
|
hosts_file=$1
|
||
|
if ! test -e $hosts_file; then
|
||
|
echo "[ERROR]: Can't find hosts file"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
username=$2
|
||
|
password=$3
|
||
|
|
||
|
# check sshkey file
|
||
|
sshkey_file=~/.ssh/id_rsa.pub
|
||
|
if ! test -e $sshkey_file; then
|
||
|
expect -c "
|
||
|
spawn ssh-keygen -t rsa
|
||
|
expect \"Enter*\" { send \"\n\"; exp_continue; }
|
||
|
"
|
||
|
fi
|
||
|
|
||
|
# get hosts list
|
||
|
hosts=$(ansible -i $hosts_file all --list-hosts | awk 'NR>1')
|
||
|
echo "======================================================================="
|
||
|
echo "hosts: "
|
||
|
echo "$hosts"
|
||
|
echo "======================================================================="
|
||
|
|
||
|
ssh_key_copy()
|
||
|
{
|
||
|
# delete history
|
||
|
sed "/$1/d" -i ~/.ssh/known_hosts
|
||
|
|
||
|
# start copy
|
||
|
expect -c "
|
||
|
set timeout 100
|
||
|
spawn ssh-copy-id $username@$1
|
||
|
expect {
|
||
|
\"yes/no\" { send \"yes\n\"; exp_continue; }
|
||
|
\"password\" { send \"$password\n\"; }
|
||
|
\"already exist on the remote system\" { exit 1; }
|
||
|
}
|
||
|
expect eof
|
||
|
"
|
||
|
}
|
||
|
|
||
|
# auto sshkey pair
|
||
|
for host in $hosts; do
|
||
|
echo "======================================================================="
|
||
|
|
||
|
# check network
|
||
|
ping -i 0.2 -c 3 -W 1 $host >& /dev/null
|
||
|
if test $? -ne 0; then
|
||
|
echo "[ERROR]: Can't connect $host"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
cat /etc/hosts | grep -v '^#' | grep $host >& /dev/null
|
||
|
if test $? -eq 0; then
|
||
|
hostaddr=$(cat /etc/hosts | grep -v '^#' | grep $host | awk '{print $1}')
|
||
|
hostname=$(cat /etc/hosts | grep -v '^#' | grep $host | awk '{print $2}')
|
||
|
|
||
|
ssh_key_copy $hostaddr
|
||
|
ssh_key_copy $hostname
|
||
|
else
|
||
|
ssh_key_copy $host
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
done
|