批量远程执行命令脚本
这个脚本的工作原理如下:
接收命令:脚本首先接收所有传入的参数,并将它们组合成一个待执行的命令字符串。
读取主机信息:脚本会读取一个名为
host.info
的文件,该文件记录了所有需要连接的主机的信息,包括IP地址、用户名、端口和密码。远程连接:对于
host.info
文件中的每一台主机,脚本都会使用expect
工具来自动进行SSH连接。这个工具能够模拟用户与终端的交互,自动输入密码等信息。执行命令:一旦成功连接到远程主机,脚本就会发送之前组合好的命令字符串,并在命令执行完毕后自动退出SSH连接。
输出结果:每台主机的执行结果都会被打印出来,并用分隔线隔开,方便查看
脚本名字: remote_exec.sh
#!/bin/bash
# 接收所有传入的参数作为需要远程执行的命令
COMMAND=$*
# 主机信息文件,记录着每台主机的IP、用户名、端口和密码
HOST_INFO=.info
# 遍历host.info文件中的每一行,提取IP地址
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do
# 根据IP地址从host.info文件中提取对应的用户名
USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)
# 根据IP地址从host.info文件中提取对应的端口号
PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)
# 根据IP地址从host.info文件中提取对应的密码
PASS=$(awk -v ip=$IP 'ip==$1{print $4}' $HOST_INFO)
# 使用expect工具自动进行SSH连接,并发送命令
expect -c "
spawn ssh -p $PORT $USER@$IP
expect {
\"(yes/no)\" {send \"yes\r\"; exp_continue}
\"password:\" {send \"$PASS\r\"; exp_continue}
\"$USER@*\" {send \"$COMMAND\r exit\r\"; exp_continue}
}
"
# 输出分隔线,方便查看每台主机的执行结果
echo "-------------------"
done
准备一个host.info
文件
# 注释行,以#开头,不会被脚本处理
# IP地址 用户名 端口 密码
192.168.1.100 user1 22 passwd1
192.168.1.101 user2 22 passwd2
# 可以继续添加更多主机信息...
通过以下方式使用它
./remote_exec.sh "ls -l /home"
Last updated