security - 通过 Jenkins Pipeline 使用 ssh 密钥从 Vault 到 ssh
问题描述
我正在尝试使用存储在 Hashicorp Vault 中的 ssh 私钥对 Jenkins Pipeline 中的某些服务器进行 ssh。我有以下代码
stage('Syncing Scripts') {
steps {
script {
withVault([configuration: vaultConfiguration, vaultSecrets: vaultSecrets]) {
remoteCommands.copyLocalDirToServer(credentials, "server_files/*", "${username}@${host}", "~/server_path")
}
}
}
}
库代码remoteCommands
void copyLocalDirToServer(String credentials, String localDir, String server, String remoteDir, int timeoutSec=10) {
sshagent(credentials : [credentials]) {
checkConnectivity(credentials, server, timeoutSec)
sh "scp -r ${localDir} ${server}:${remoteDir} "
}
}
username
,host
是通过 Vault 绑定的两个环境变量。credentials
当前是指存储在 Jenkins 凭据中的 ssh 密钥。管道正在工作。
Vault 应该是唯一的事实来源。ssh 密钥存储在 Vault 中,我可以获取它们。但问题是我在环境变量中从 Vault 获取了一个字符串。我不确定如何将其传递给 ssh 命令。创建要传递给 ssh 命令的文件会将 ssh 密钥以纯文本形式放在 Jenkins 上,这是不推荐的。
为了避免这种情况,我不得不在 Jenkins 凭据中复制 ssh 密钥。我想避免这种重复。
什么是可能的解决方案,可以将从秘密提供者(如 Vault)获取的秘密 ssh 密钥传递给在 Jenkins Pipeline 中运行且不会损害安全最佳实践的 ssh 命令?
解决方案
推荐阅读
- unity3d - 字体是用什么单位测量的
- odoo-11 - 为什么 Odoo 没有检测到我创建的模型?
- plotly - Plotly 获取图例可见状态
- javascript - fullpage.js 与 jqueryui 手风琴:打开部分后滚动到顶部
- java - 我在更新数据库时遇到问题。使用方法 executeUpdate() tnrows 错误
- drupal-7 - Drupal7:将选定字段实时链接到 Drupal7 中的文本字段
- jquery - 使用 AJAX 接收 jQuery 扩展表单时 validate_on_submit() 失败
- excel - 有没有办法比较更改excel中的列并删除重复项?
- c# - 将三级层次结构从集合渲染到 mvc 视图
- c# - EntityFramework 从数据库更新模型导致未创建映射文件