需要目标机器安装有 expect 命令
分成五个文件config.ini(配置文件)、id_ras.pub(公钥)、read.sh(一个函数,用于读取配置文件)、test.sh(执行文件)、run.sh(远程运行脚本) 是一个配置文件.
步骤1:读取配置文件 ip,user,pwd
步骤2:将id_rsa.pub、run.sh scp到远程机器上
步骤3:远程运行脚本
read.sh
#!/bin/bash GetKey(){ section=$(echo $1 |cut -d ‘.‘ -f 1) key=$(echo $1 |cut -d ‘.‘ -f 2) if [ "$section"x = "ip"x ];then nub=`cat config.ini | grep -n "$key={" |awk -F ":" ‘{print $1}‘` nue=`cat config.ini | grep -n "}" |awk -F ":" ‘{print $1}‘` nub=`expr $nub +1` for i in $nue do if [ $i -gt $nub ]; then a=$i break fi done nue=`expr $a -1` sed -n "$nub,$nue p" config |sed s/,//g else sed -n "/\[$section\]/,/\[.*\]/{ /^\[.*\]/d /^[ \t]*$/d /^$/d /^#.*$/d s/^[ \t]*$key[ \t]*=[ \t]*\(.*\)[ \t]*/\1/p }" config.ini }
run.sh
#!/bin/bash Create(){ /usr/bin/expect -c" set timeout 30 spawn ssh-keygen -t rsa expect \":\" send \"\r\" expect \":\" send \"\r\" expect \":\" send \"\r\" expect eof exit " } if [ ! -d .ssh ];then Create if [ $? != 0 ];then echo "step for create failed" exit 0 else cat id_rsa.pub >> .ssh/authorized_keys if [ $? != 0 ];then echo "step for cp failed" exit 0 fi fi else cat id_rsa.pub >> .ssh/authorized_keys if [ $? != 0 ];then echo "step for cp failed" exit 0 fi fi
test.sh
#!/bin/bash . ./read.sh ip=$(GetKey "ip.ip") passwd=$(GetKey "pass.passwd") user=$(GetKey "user.usr") for i in $ip do /usr/bin/expect -c" set timeout10 spawn /usr/bin/scp -r run.sh [email protected]$i expect \"password:\" {send \"$passwd\r\"} spawn /usr/bin/scp -r id_rsa.pub [email protected]$i expect \"password:\" {send \"$passwd\r\"} expect eof exit " /usr/bin/expect << EOF set timeout 10 spawn ssh [email protected]$i expect "password:" send "$passwd\r" expect "]" send "sh run.sh\r" send "exit\r" expect eof EOF done
配置文件
[ip] ip={ 12.23.31.114 ,21.34.54.112 } [user] usr=hehehe [pass] passwd=wohehehda
时间: 2024-10-06 09:59:10