Security 通过Jenkins管道使用从Vault到ssh的ssh密钥

Security 通过Jenkins管道使用从Vault到ssh的ssh密钥,security,jenkins,ssh,jenkins-pipeline,hashicorp-vault,Security,Jenkins,Ssh,Jenkins Pipeline,Hashicorp Vault,我正在尝试使用存储在Hashicorp Vault中的ssh私钥来ssh到Jenkins管道中的一些服务器。我有以下代码 stage('Syncing Scripts') { steps { script { withVault([configuration: vaultConfiguration, vaultSecrets: vaultSecrets]) { remoteComman

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

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} "
    }
}
用户名
主机
是通过Vault绑定的两个环境变量<代码>凭据
当前指的是存储在Jenkins凭据中的ssh密钥。管道正在运行

金库被认为是真相的唯一来源。ssh密钥存储在Vault中,我可以获取它们。但问题是我从Vault中获取了一个环境变量中的字符串。我不知道如何将其传递给ssh命令。创建要传递给ssh命令的文件会将ssh密钥以纯文本形式放在Jenkins上,这是不推荐的

为了避免这种情况,我必须在Jenkins凭据中复制ssh密钥。我希望避免这种重复


将从秘密提供程序(如Vault)获取的秘密ssh密钥传递给在Jenkins管道中运行的ssh命令的可能解决方案是什么?因此,要澄清的是:“
username
host
是通过Vault绑定的两个环境变量”。当您在
copyLocalDirToServer
调用中使用它们时,是使用env-vars还是Jenkins凭据?@lxop用户名和主机是env-vars。凭证当前是Jenkins凭证。我想改为使用一个env-var-tooOK,这恐怕超出了我的经验范围。希望其他人能提供一些东西。