
Cashier是一个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)server配置
控制服务端基础行为,包括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文件路径 } }
auth配置
配置用户身份验证(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配置
控制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配置(可选)
用于访问存储在AWS S3的文件(如签名密钥),支持通过IAM角色或环境变量配置。
| 参数 | 类型 | 说明 |
|---|---|---|
region | string | S3存储桶所在区域(如us-east-1) |
access_key | string | AWS访问密钥ID(可存储于Vault) |
secret_key | string | AWS密钥(可存储于Vault) |
vault配置(可选)
用于访问Vault中的密钥(如签名密钥、OAuth密钥)。
| 参数 | 类型 | 说明 |
|---|---|---|
address | string | Vault服务器URL |
token | string | Vault认证令牌 |
bash# 运行Cashier容器,映射端口10000,挂载当前目录作为配置目录 docker run -it --rm -p 10000:10000 --name cashier -v ${PWD}:/cashier nsheridan/cashier
配置客户端:创建~/.cashier.conf(HCL格式)或使用命令行参数:
hclca = "https://sshca.example.com" # 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://sshca.example.com/revoked
https://<ca url>/admin/certs)查看已颁发证书,选择需吊销的证书并执行吊销。RevokedKeys配置拒绝该证书访问。欢迎提交PR,依赖项通过govendor管理。详情参考https://github.com/nsheridan/cashier%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务