modify scripts
This commit is contained in:
@ -29,18 +29,47 @@ else
|
|||||||
fi
|
fi
|
||||||
servers=()
|
servers=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
|
# 跳过空行和注释行
|
||||||
|
[[ -z "$line" || "$line" =~ ^# ]] && continue
|
||||||
servers+=("$line")
|
servers+=("$line")
|
||||||
done < "$file_path"
|
done < "$file_path"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 推送公钥到远程服务器
|
# 推送公钥到远程服务器
|
||||||
|
public_key=$(cat ~/.ssh/id_rsa.pub)
|
||||||
for server in "${servers[@]}"; do
|
for server in "${servers[@]}"; do
|
||||||
public_key=$(cat ~/.ssh/id_rsa.pub)
|
# 第一次尝试推送
|
||||||
ssh "$server" "mkdir -p ~/.ssh && echo '$public_key' >> ~/.ssh/authorized_keys"
|
echo "正在推送公钥到 $server..."
|
||||||
if [ $? -eq 0 ]; then
|
output=$(ssh "$server" "mkdir -p ~/.ssh && echo '$public_key' >> ~/.ssh/authorized_keys" 2>&1)
|
||||||
|
exit_code=$?
|
||||||
|
|
||||||
|
if [ $exit_code -eq 0 ]; then
|
||||||
echo "公钥已成功推送到 $server"
|
echo "公钥已成功推送到 $server"
|
||||||
else
|
continue
|
||||||
echo "推送公钥到 $server 时出错。"
|
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
|
# 检测是否是主机密钥验证失败
|
||||||
|
if echo "$output" | grep -q "Host key verification failed"; then
|
||||||
|
echo "检测到 $server 的主机密钥已变更,正在清理旧密钥..."
|
||||||
|
# 提取主机地址(处理 user@host 格式,取 @ 后面的部分)
|
||||||
|
host=$(echo "$server" | cut -d'@' -f2)
|
||||||
|
# 清理旧密钥
|
||||||
|
cleanup_output=$(ssh-keygen -R "$host" 2>&1)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "清理 $host 旧密钥失败:$cleanup_output"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo "已清理 $host 的旧密钥,重新尝试推送..."
|
||||||
|
# 重新推送
|
||||||
|
retry_output=$(ssh "$server" "mkdir -p ~/.ssh && echo '$public_key' >> ~/.ssh/authorized_keys" 2>&1)
|
||||||
|
retry_code=$?
|
||||||
|
if [ $retry_code -eq 0 ]; then
|
||||||
|
echo "公钥已成功推送到 $server"
|
||||||
|
else
|
||||||
|
echo "重新推送 $server 失败:$retry_output"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# 其他错误类型
|
||||||
|
echo "推送 $server 失败:$output"
|
||||||
|
fi
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user