nsheridan/cashierCashier是一个SSH证书颁发机构(CA),用于管理OpenSSH证书认证。OpenSSH支持使用SSH证书进行身份验证,证书包含公钥、身份信息并由标准SSH密钥签名。与普通SSH密钥相比,证书可包含更多信息(允许使用的用户、有效期、权限等),且无需分发到每台机器(仅需服务器信任签名密钥),支持吊销,适用于集中化管理SSH访问的场景。
permit-pty)、最大有效期,确保访问权限可控。配置分为server、auth、ssh、aws、vault等部分,支持HCL格式。
以下配置项的文件路径支持多种类型(除http_logfile仅支持本地文件):
/data/ssh_signing_key、tls/server.key/s3/开头,如/s3/my-bucket/ssh_signing_key(需配置aws)/gcs/开头,如/gcs/my-bucket/ssh_signing_key/vault/开头,如/vault/secret/cashier/ssh_signing_key(需配置vault)控制服务端基础行为,包括TLS、数据库、监听地址等。
| 参数 | 类型 | 说明 |
|---|---|---|
use_tls | bool | 是否启用TLS,启用时需配置tls_key+tls_cert或letsencrypt_servername |
tls_key | string | TLS私钥路径 |
tls_cert | string | TLS证书路径 |
letsencrypt_servername | string | Let's Encrypt证书的FQDN |
address | string | 监听IP地址(默认监听所有地址) |
port | int | 监听端口 |
user | string | 服务降级的用户(注意:Go运行时限制可能导致部分线程保留权限) |
cookie_secret | string | 会话cookie的认证密钥(可存储于Vault,格式/vault/path/key) |
csrf_secret | string | CSRF保护的认证密钥(可存储于Vault) |
http_logfile | string | HTTP请求日志路径(仅支持本地文件) |
require_reason | bool | 是否要求客户端提供申请证书的原因(默认false) |
database | object | 数据库配置(用于记录证书信息) |
database配置示例(支持mysql、sqlite、mem类型):
hclserver { database { type = "mysql" address = "my-db-host.corp" username = "user" password = "passwd" # 可存储于Vault:/vault/secret/cashier/mysql_password dbname = "cashier_production" } database { type = "sqlite" filename = "/data/cashier.db" # 本地SQLite文件路径 } }
配置用户身份验证(OAuth)。
| 参数 | 类型 | 说明 |
|---|---|---|
provider | string | OAuth提供商(支持"google"、"github"、"gitlab"等) |
oauth_client_id | string | OAuth客户端ID(可存储于Vault) |
oauth_client_secret | string | OAuth客户端密钥(可存储于Vault) |
oauth_callback_url | string | OAuth回调URL(路径固定为/auth/callback) |
users_whitelist | array | 允许访问的用户白名单(未设置则允许所有域/组织用户) |
provider_opts | object | 提供商特定选项(如GitHub的organization、Google的domain) |
provider_opts示例:
hclauth { provider = "google" provider_opts { domain = "example.com" # 仅允许example.com域用户 } } auth { provider = "github" provider_opts { organization = "my-org" # 仅允许my-org组织成员 } }
控制SSH证书的签名规则。
| 参数 | 类型 | 说明 |
|---|---|---|
signing_key | string | SSH证书签名私钥路径(使用ssh-keygen生成,需安全存储) |
additional_principals | array | 额外添加到证书的主体(默认仅包含请求者***的用户名部分) |
max_age | string | 证书最大有效期(Go time.Duration格式,如24h) |
permissions | array | 证书允许的操作(参考ssh-keygen -O选项,如["permit-pty", "permit-port-forwarding"]) |
用于访问存储在AWS S3的文件(如签名密钥),支持通过IAM角色或环境变量配置。
| 参数 | 类型 | 说明 |
|---|---|---|
region | string | S3存储桶所在区域(如us-east-1) |
access_key | string | AWS访问密钥ID(可存储于Vault) |
secret_key | string | AWS密钥(可存储于Vault) |
用于访问Vault中的密钥(如签名密钥、OAuth密钥)。
| 参数 | 类型 | 说明 |
|---|---|---|
address | string | Vault服务器URL |
token | string | Vault认证令牌 |
bash# 运行Cashier容器,映射端口***,挂载当前目录作为配置目录 docker run -it --rm -p ***:*** --name cashier -v ${PWD}:/cashier nsheridan/cashier
配置客户端:创建~/.cashier.conf(HCL格式)或使用命令行参数:
hclca = "[***]" # CA服务器地址 key_type = "ed25519" # 密钥类型(rsa/ecdsa/ed25519) validity = "24h" # 证书有效期
获取证书:
bashcashier --config ~/.cashier.conf # 启动客户端,自动打开浏览器进行OAuth认证
信任CA公钥:将CA签名公钥(ssh_ca.pub)添加到sshd_config:
confTrustedUserCAKeys /etc/ssh/ca.pub # 信任CA签名公钥
启用证书吊销(可选):
confRevokedKeys /etc/ssh/revoked_keys # 证书吊销列表路径
bash*/10 * * * * curl -s -o /etc/ssh/revoked_keys [***]
https://<ca url>/admin/certs)查看已颁发证书,选择需吊销的证书并执行吊销。RevokedKeys配置拒绝该证书访问。欢迎提交PR,依赖项通过govendor管理。详情参考项目GitHub页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务