资讯详情

Argo CD `argocd cert list` 命令完全指南:查询仓库证书与 SSH Known Hosts 配置

📅 2026/9/13 22:26:30 | 华诺云谱 👁 阅读
Argo CD `argocd cert list` 命令完全指南:查询仓库证书与 SSH Known Hosts 配置
Argo CDargocd cert list命令完全指南查询仓库证书与 SSH Known Hosts 配置【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd导读argocd cert list是 Argo CD CLI 中用于列出已配置仓库证书的核心命令覆盖两类证书条目HTTPS TLS 证书与 SSH known hosts 公钥。它常与argocd cert add-tls、argocd cert add-ssh、argocd cert rm配合构成仓库证书生命周期的完整闭环。读完本文你将掌握该命令的全部参数用法、输出格式差异、过滤与排序技巧并理解其底层基于 gRPC 的CertificateService/ListCertificates调用链与RepositoryCertificate数据模型。一、命令概览与适用场景1.1 命令定位argocd cert list属于argocd cert命令组其父命令定义为 Manage repository certificates and SSH known hosts entries见 argocd cert 命令参考。它的作用是查询 Argo CD 的证书存储cert store中当前管理的所有证书条目。在 Argo CD 中证书存储主要服务于Repo Server与外部 Git/Helm 仓库建立安全连接时的校验需求HTTPS 证书用于校验 HTTPS 仓库服务器的 TLS 证书是否可信SSH known hosts 条目用于校验 SSH 仓库服务器的主机公钥即 known_hosts 语义防止中间人攻击。因此argocd cert list的典型使用时机包括排查仓库连接失败、证书不匹配问题在批量添加add-ssh --batch或移除rm前后核对证书存储内容将证书清单导出为 JSON/YAML 用于审计、备份或脚本化处理。1.2 命令语法argocd cert list [flags]该命令不接受位置参数所有行为均由 flags 控制。二、参数详解Options2.1 本命令专属参数参数类型默认值说明--cert-type stringstring空不限只列出指定类型的证书合法值为ssh或https-h, --helpbool-显示list子命令帮助信息--hostname-pattern stringstring空不限只列出主机名匹配给定 glob 模式的证书-o, --output stringstringwide输出格式可选json、yaml、wide--sort stringstring空仅对wide格式生效的显示排序字段可选hostname或type--cert-type的合法值约束从源码实现看cmd/argocd/commands/cert.go当指定--cert-type时命令会先进行严格校验switch certType { case ssh: case https: default: fmt.Println(cert-type must be either ssh or https) os.Exit(1) }传入除ssh、https之外的任何值都会立即报错退出因此在实际使用中请务必使用这两个合法值。--hostname-pattern的 glob 语义该参数透传到 gRPC 请求的RepositoryCertificateQuery.HostNamePattern字段见 cmd/argocd/commands/cert.go支持 glob 通配符匹配。例如gitlab.example.com精确匹配单个主机*.example.com匹配该域名下所有子域条目?通配符同样可用。值得留意的是cert rm命令出于安全考虑禁止使用单个*作为主机名模式cmd/argocd/commands/cert.go而list只读不删没有这一限制。--output的三种格式wide默认输出人类可读的表格列为HOSTNAME、TYPE、SUBTYPE、INFOjson/yaml输出结构化的RepositoryCertificateList便于程序解析与审计。实现上list命令对输出格式做了分支处理cmd/argocd/commands/cert.goyaml/json走PrintResourceListwide/空串走printCertTable其他值则直接报 unknown output format。--sort的排序规则--sort仅影响wide表格输出源码中的排序实现如下cmd/argocd/commands/cert.goswitch sortOrder { case hostname, : // 按 ServerName 升序排列 case type: // 按 CertType 升序排列 }即不指定或指定hostname时按主机名升序指定type时按证书类型https/ssh升序。该参数对json/yaml输出不生效。2.2 继承自父命令的全局参数argocd cert list同样继承argocd根命令及argocd cert的全局参数常见的关键项如下参数说明--server stringArgo CD API Server 地址也可通过登录上下文配置--argocd-context string使用的 Argo CD 服务器上下文名称--auth-token string认证令牌也可设置ARGOCD_AUTH_TOKEN环境变量--config stringArgo CD 配置文件路径默认~/.config/argocd/config--core若为 trueCLI 直接访问 Kubernetes 而非 Argo CD API Server--grpc-web启用 gRPC-Web 协议适用于 API Server 位于不支持 HTTP2 的代理之后的场景--grpc-web-root-path string配合--grpc-web设置 Web 根路径--insecure跳过服务器证书与域名校验--plaintext禁用 TLS--port-forward通过端口转发连接一个随机的 argocd-server 端口--port-forward-namespace string端口转发使用的命名空间--kube-context string指定 kube-context--logformat string日志格式json默认或text--loglevel string日志级别debug/info/warn/error默认info--http-retry-max int建立 HTTP 连接的最大重试次数-H, --header strings为所有请求附加额外 Header可重复指定或逗号分隔--client-crt/--client-crt-key/--server-crt客户端/服务器证书及密钥文件另有一组用于 Helm Chart 定制部署场景的参数--controller-name、--repo-server-name、--server-name、--redis-name、--redis-haproxy-name、--redis-compress。当通过 Helm 安装且对应组件名称标签与默认值不一致时需设置这些参数或对应的环境变量如ARGOCD_APPLICATION_CONTROLLER_NAME、ARGOCD_REPO_SERVER_NAME、ARGOCD_SERVER_NAME、ARGOCD_REDIS_NAME、ARGOCD_REDIS_HAPROXY_NAME否则 CLI 无法准确定位后端组件。三、输出字段背后的数据模型理解cert list的输出需要先认识证书条目的底层数据结构。该结构定义于 pkg/apis/application/v1alpha1/repository_types.go// A RepositoryCertificate is either SSH known hosts entry or TLS certificate type RepositoryCertificate struct { // ServerName specifies the DNS name of the server this certificate is intended for ServerName string json:serverName // CertType specifies the type of the certificate - currently one of https or ssh CertType string json:certType // CertSubType specifies the sub type of the cert, i.e. ssh-rsa CertSubType string json:certSubType // CertData contains the actual certificate data, dependent on the certificate type CertData []byte json:certData // CertInfo will hold additional certificate info, depdendent on the certificate type (e.g. SSH fingerprint, X509 CommonName) CertInfo string json:certInfo }wide表格的四列与字段对应关系为表格列对应字段含义HOSTNAMEServerName证书所针对的服务器 DNS 名称TYPECertType证书类型https或sshSUBTYPECertSubType证书子类型如ssh-rsa仅 SSH 有意义INFOCertInfo附加信息如 SSH 指纹或 X.509 CommonName表格由printCertTable通过tabwriter渲染输出cmd/argocd/commands/cert.go。而json/yaml输出则直接序列化RepositoryCertificateList定义于 pkg/apis/application/v1alpha1/repository_types.go其中CertData为证书原始数据PEM 或 SSH 公钥字节不会在表格中展示。四、底层调用链从 CLI 到 gRPC 服务argocd cert list的执行路径如下实现见 cmd/argocd/commands/cert.go解析并校验--cert-type通过headless.NewClientOrDie创建客户端连接调用certIf.ListCertificates(ctx, certificatepkg.RepositoryCertificateQuery{HostNamePattern: hostNamePattern, CertType: certType})根据--output选择渲染方式。ListCertificates是 gRPC 服务CertificateService的方法服务端接口定义见 pkg/apiclient/certificate/certificate.pb.go。查询参数RepositoryCertificateQuery包含HostNamePattern、CertType、CertSubType三个字段其中CertSubType在list命令中固定为空不过滤主要用于rm命令做精细删除。也就是说过滤逻辑类型、主机名 glob实际发生在服务端而非客户端。CLI 只是把过滤条件打包进查询请求服务端返回过滤后的RepositoryCertificateList。这意味着list输出的是集群中证书存储的真实状态而不是本地缓存。五、实战示例以下示例基于 argocd cert 命令参考 中提供的示例场景仓库服务器cd.example.com。5.1 列出全部证书默认 wide 表格argocd cert list输出示例HOSTNAME TYPE SUBTYPE INFO cd.example.com https CNcd.example.com cd.example.com ssh ssh-rsa SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5.2 只列出 HTTPS TLS 证书argocd cert list --cert-type https5.3 只列出 SSH known hosts 条目argocd cert list --cert-type ssh5.4 按主机名 glob 过滤# 列出 example.com 域下所有主机的证书 argocd cert list --hostname-pattern *.example.com # 精确匹配单个主机 argocd cert list --hostname-pattern cd.example.com注意shell 会展开部分通配符建议对 glob 模式加引号。5.5 结构化输出JSON / YAMLargocd cert list -o json argocd cert list -o yamlYAML 输出示例items: - serverName: cd.example.com certType: https certSubType: certData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t... certInfo: CNcd.example.com - serverName: cd.example.com certType: ssh certSubType: ssh-rsa certData: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVB... certInfo: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx metadata: {}5.6 表格排序# 按主机名升序默认行为 argocd cert list --sort hostname # 按证书类型排序https 在 ssh 之前 argocd cert list --sort type5.7 与证书管理命令组合使用证书生命周期管理以list为查询入口配合其他子命令形成完整闭环# 添加 TLS 证书文件或 stdin 两种方式 argocd cert add-tls --from ~/mycert.pem cd.example.com cat ~/mycert.pem | argocd cert add-tls cd.example.com # 扫描主机并批量添加 SSH known hosts 条目--batch 为必填 ssh-keyscan cd.example.com | argocd cert add-ssh --batch # 查看添加结果 argocd cert list --cert-type https argocd cert list --cert-type ssh # 删除仅删除 TLS 证书或删除该主机全部条目 argocd cert rm --cert-type https cd.example.com argocd cert rm cd.example.com六、源码级细节与注意事项6.1 去重与校验逻辑供add系列参考虽然去重逻辑属于add-tls但理解它能帮你预判list中可能出现多少条目deduplicatePEMCertificates通过 X.509 证书的 SHA256 指纹去重重复证书会打印 WARNING 并跳过cmd/argocd/commands/cert.go。对应测试见 cmd/argocd/commands/cert_test.go覆盖了重复证书、同 Subject 不同证书、非法证书、空输入、批量 100 张证书等场景其中“混入非法条目会立即终止”的行为验证了去重函数在第一个解析错误即返回失败。6.2 SSH 条目与多主机名展开add-ssh在解析 known hosts 行时一条记录可能对多个主机名生效会为每个主机名分别创建条目cmd/argocd/commands/cert.go。因此你在list中可能看到多条TYPEssh但HOSTNAME不同的条目源自同一 known_hosts 行这是正常现象。6.3 注意点汇总--cert-type只接受ssh/https其他值直接报错退出--sort仅对wide格式有意义json/yaml输出顺序由服务端返回顺序决定--hostname-pattern使用 glob 语法过滤在服务端完成未登录或 token 无效时命令会因 gRPC 认证失败而报错请先通过argocd login或设置ARGOCD_AUTH_TOKEN建立会话。七、相关命令参考argocd cert证书管理命令组总览与示例argocd cert add-tls添加 HTTPS TLS 证书argocd cert add-ssh添加 SSH known hosts 条目argocd cert rm删除证书注意*主机名被禁用结语argocd cert list虽然参数不多却是仓库证书存储的“只读窗口”。通过--cert-type、--hostname-pattern精确过滤通过-o json|yaml对接自动化审计通过--sort优化表格可读性——再结合 cmd/argocd/commands/cert.go 中CertificateService/ListCertificates的调用链与 pkg/apis/application/v1alpha1/repository_types.go 的数据模型你既能完成日常运维查询也能在遇到异常输出时快速定位到底层原因。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。