You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Travis NAT IP为AWS VPC安全组IP列表的脚本报错排查

修复AWS托管前缀列表创建脚本的参数解析错误

问题根源

你碰到的错误是因为--entries参数的格式不符合AWS CLI要求。AWS CLI规定,前缀列表的每个条目必须是独立的Cidr=xxx/32,Description=xxx单元,多个单元之间用空格分隔;但你的脚本把所有Cidr和Description键值对直接拼接成了一串,导致CLI识别到重复的Description键,无法正确解析参数。


修正后的脚本

改用数组存储每个条目,最后用空格拼接成符合要求的格式,避免参数解析错误:

#!/bin/bash

# 获取Travis NAT IP列表
TRAVIS_NAT_IPS=$(wget -qO- https://dnsjson.com/nat.travisci.net/A.json | jq -r '.results.records[]')
readarray -t IP_ADDRESSES <<< "$TRAVIS_NAT_IPS"

# 初始化条目数组,每个元素对应一个前缀列表条目
ENTRIES=()
for IP in "${IP_ADDRESSES[@]}"
do
    ENTRIES+=("Cidr=$IP/32,Description=Travis")
done

# 创建托管前缀列表,数组元素自动用空格分隔
aws ec2 create-managed-prefix-list \
    --address-family IPv4 \
    --max-entries 100 \
    --entries "${ENTRIES[@]}" \
    --prefix-list-name travis-nat-ips

更简洁的替代方案

用jq直接生成符合CLI要求的条目格式,省去循环拼接的步骤:

#!/bin/bash

# 用jq一次性生成空格分隔的条目字符串
ENTRIES=$(wget -qO- https://dnsjson.com/nat.travisci.net/A.json | jq -r '.results.records[] | "Cidr=\(.)/32,Description=Travis"' | tr '\n' ' ')

aws ec2 create-managed-prefix-list \
    --address-family IPv4 \
    --max-entries 100 \
    --entries "$ENTRIES" \
    --prefix-list-name travis-nat-ips

后续安全配置

创建好托管前缀列表后,在AWS安全组的入站规则中添加SSH(22端口)规则,将源设置为这个前缀列表即可。这样既能允许所有Travis NAT IP的SSH部署连接,又不会把22端口开放到公网。

内容的提问来源于stack exchange,提问作者Aron Novak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:31:01