我有一个简单的 for 循环一衬里,用于检查具有相同密码集的多个服务器上的内容。我想将这个衬垫开发成一个脚本,通过 IP 地址登录到服务器集群,提示输入密码并执行命令。比如重启一个服务。这就是我使用的:
for i in {1..253}
do sshpass -p PASSWORDHERE ssh -o StrictHostKeyChecking=no [email protected].${i} 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null; echo ""; done
我的剧本很弱,我真的不知道从哪里开始。顺便说一句,我想通过一套基本的工具来实现这一目标。我无法安装任何第三方。
任何帮助表示赞赏。
答案1
for i in {1..253}
do
ip=192.168.1.${i}
echo "Enter password for: $ip"
read pswd
case "$pswd" in
*) password=$pswd;;
esac
sshpass -p "$password" ssh -o StrictHostKeyChecking=no username@$ip 'hostname
echo "Checking if foo.log exists: `ls -lh /var/log/foo.log | wc -l`"
echo "Checking if bar.log is present: `ls -lh /var/log/bar.log | wc -l`"
' 2>/dev/null
done
那应该有效。请记住,如果您厌倦了在测试期间运行该循环,或者只是使用较小的范围(例如 1 到 5)来调试它,则 ctrl + c 将终止该循环。