2 个版本
0.1.1 | 2021 年 9 月 14 日 |
---|---|
0.1.0 | 2021 年 9 月 11 日 |
#918 在 认证
390KB
1K SLoC
vaultssh
一个轻量级 CLI 包装器,用于从 Hashicorp Vault 自动获取和验证 SSH 证书
vaultssh 是一个轻量级 CLI 包装器,用于在远程连接到主机时自动获取和使用已签名的 SSH 证书。它包装了 ssh 进程,因此与所有标准 ssh 标志兼容。
安装
cargo install vaultssh
或使用 brew
安装
brew tap jmgilman/homebrew-apps
brew install vaultssh
用法
$> vssh --help
vaultssh 0.1.0
A small CLI wrapper for authenticating with SSH keys from Hashicorp Vault
USAGE:
vssh [FLAGS] [OPTIONS] <HOST> [ARGS]...
ARGS:
<HOST> ssh host
<ARGS>... additional arguments to pass to ssh
FLAGS:
-b, --basic disables terminal effects
-h, --help Print help information
-p, --persist persist acquired tokens to ~/.vault-token
-V, --version Print version information
OPTIONS:
-a, --auth-method <AUTH> default authentication method to use
--auth-mount <AUTH_MOUNT> default authentication mount to use
-c, --config <CONFIG> config file (default: $HOME/.vssh)
-i, --identity <IDENTITY> ssh key-pair to sign and use (default: $HOME/.ssh/id_rsa)
-m, --mount <MOUNT> mount path for ssh backend (default: ssh)
-r, --role <ROLE> vault role account to sign with (default: "default")
-s, --server <SERVER> address of vault server (default: $VAULT_ADDR)
-t, --token <TOKEN> vault token to use for authentication (default: $VAULT_TOKEN)
配置
配置可以创建在 ~/.vssh
中,或者通过 CLI 选项传入。配置文件采用 TOML 格式。以下是一个示例
# Example config - place this in ~/.vssh to automatically use it
#
# The authentication names are the same as the default mount point for the
# associated engine. For example, "approle" for AppRole and "oidc" for OIDC.
# Not all engines are supported, only the ones shown below. You don't have to
# configure each one and may only configure the one you set to the default.
auth = "oidc" # default authentication method to use
auth_mount = "oidc" # default mount point for the authentication method
identity = "~/.ssh/id_rsa" # ssh key-pair to sign and use
mount = "ssh" # mount path for ssh backend
persist = true # persist acquired tokens to ~/.vault-token
role = "myrole" # vault role account to sign with
server = "https://vault:8200" # address of vault server
[approle] # name of auth method to configure
role_id = "myrole" # default values for auth method
[oidc]
role = "admin
[userpass]
username = "myuser"
流程
运行 vssh 时发生以下操作
- 使用传递的身份名称搜索有效的 SSH 证书
- 如果没有找到证书,或者找到的证书已过期,则请求新的证书
- 使用任何找到的令牌启动 Vault 连接。如果没有找到令牌或令牌已过期,则会提供登录提示以获取新的令牌。
- 为传递的身份的公钥签名并保存证书到本地文件系统
- 执行 ssh 程序并传递主机和任何其他参数
身份验证
默认情况下,如果需要新的证书但没有找到有效的令牌,vssh 将启动登录提示以获取新的令牌。此令牌将仅用于单个会话,除非给出 --persist
选项,在这种情况下,令牌将保存到 Vault CLI 的默认位置 ~/.vault-token
。未来的 vssh 使用将使用此令牌。
目前不支持所有身份验证方法,请参阅上述配置示例以了解支持的方法。指定身份验证方法的默认值将预先填充登录提示以简化登录。但是,如果需要,所有其他身份验证方法仍然可用(即,设置默认值不会跳过任何提示)。
贡献
查看 问题 以了解需要关注的项目或提交您自己的项目,然后
- 将其分叉(https://github.com/jmgilman/vaultssh/fork)
- 创建您的功能分支(git checkout -b feature/fooBar)
- 提交您的更改(git commit -am 'Add some fooBar')
- 将更改推送到分支(git push origin feature/fooBar)
- 创建一个新的拉取请求
依赖关系
~15–34MB
~512K SLoC