
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页面。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务