提问人:Jacob Rawls 提问时间:11/15/2023 最后编辑:BarmarJacob Rawls 更新时间:11/15/2023 访问量:65
通过 ssh 更新多台计算机的脚本中的错误
Errors in script for updating multiple machines through ssh
问:
首先,请原谅我缺乏经验。
我正在尝试创建一个通过 ssh 升级多台计算机的脚本,但主要收到错误"upgrade-all.sh: 7: Bad substitution"
我试图修改我的原始脚本是从 Arjun G 从帖子文本中的回答中找到的
我的脚本是:
#!/bin/bash
USERNAMES="jed", "root", "cord"
HOSTS="***.***.***.***", "***.***.***.***", "***.***.***.***"
PASSWORDS="***", "***", "***"
SCRIPT="pwd; echo -e 'PASSWORD' | sudo apt update | sudo apt upgrade -y && sudo apt autoremove -y"
for i in ${!HOSTS[@]} ; do
echo ${HOSTS[i]}
SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done
我尝试交换变量,但它没有清除错误。我发现自己无法用替换来做出有根据的猜测。${!HOSTS[@]}
感谢您的帮助!
答:
0赞
Bruno
11/15/2023
#1
这是相同的脚本,更正了 bash 语法(数组创建)和基本数组用法(主要是引用)。
我不在乎任何安全问题(命令行上的密码),在问题评论中进行了讨论。
#!/bin/bash
USERNAMES=("jed" "root" "cord")
HOSTS=("***.***.***.***" "***.***.***.***" "***.***.***.***")
PASSWORDS=("***" "***" "***")
SCRIPT="pwd; echo -e 'PASSWORD' | sudo apt update | sudo apt upgrade -y && sudo apt autoremove -y"
for i in "${!HOSTS[@]}" ; do
echo "${HOSTS[i]}"
SCR="${SCRIPT/PASSWORD/${PASSWORDS[i]}}"
sshpass -p "${PASSWORDS[i]}" ssh -l "${USERNAMES[i]}" "${HOSTS[i]}" "${SCR}"
done
评论
root,
ansible