使用Vault中的SSH密钥通过Jenkins Pipeline进行SSH

问题描述

我正在尝试使用存储在Hashicorp Vault中的ssh私钥来SSH到Jenkins Pipeline中的某些服务器。我有以下代码

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} "
    }
}

usernamehost是通过保险柜绑定的两个环境变量。 credentials当前是指存储在Jenkins凭证中的ssh密钥。管道正在工作。

保管箱应该是事实的唯一来源。 ssh密钥存储在Vault中,我可以获取它们。但是问题是我从Vault中的环境变量中获取一个字符串。我不确定如何将其传递给ssh命令。创建文件以传递给ssh命令,不建议将ssh密钥以纯文本形式放在Jenkins上。

为避免这种情况,我不得不在Jenkins凭据中复制ssh密钥。我想避免这种重复。

将从秘密提供者(例如Vault)获取的ssh秘密密钥传递给在Jenkins Pipeline中运行且不影响安全最佳实践的ssh命令的可行解决方案是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)