#!/bin/bash
hostnames='admin node1 node2 node3'
passwords='1234 1235 1236 1237'
for i in $hostnames
do
for j in $passwords
do
sshpass -p $j ssh-copy-id root@$i -p 22
done
done
在运行此脚本时,我意识到主机名中的每个元素都使用密码进行了尝试。
如何使主机名中的第一个元素与密码中的第一个元素匹配,然后将第二个元素与第二个元素相匹配,以此类推,而不是将主机名中的每个元素与密码中的每个元素匹配?>
还有可能从文件中获取主机名和密码,而不是像我在代码中那样声明它们吗?
答案 0 :(得分:0)
使用数组,并迭代索引而不是元素。
hostnames=(admin node1 node2 node3)
passwords=(1234 1235 1236 1237)
for i in "${!hostnames[@]}"; do
sshpass -p "${passwords[i]}" ssh-copy-id root@"${hostnames[i]}" -p 22
done
或者,类似于 Biffen 在评论中的建议:
while read -r host password; do
sshpass -p "$password" ssh-copy-id root@"$hostname" -p 22
done <<EOF
admin 1234
node1 1235
node2 1236
node3 1237
EOF