Jenkins 如何正确地将凭据传递给ssh步骤插件';s`sshCommand`不使用字符串插值?

Jenkins 如何正确地将凭据传递给ssh步骤插件';s`sshCommand`不使用字符串插值?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,因此,我有以下管道阶段,非常有效: stage('Database') { steps { script { remote = createDeployRemote() withCredentials([ usernamePassword(credentialsId: "credential-id", usernameVariable: 'THE_USERNAME', passwordVariable: 'THE_PASS

因此,我有以下管道阶段,非常有效:

stage('Database') {
  steps {
    script {
      remote = createDeployRemote()

      withCredentials([
        usernamePassword(credentialsId: "credential-id", usernameVariable: 'THE_USERNAME', passwordVariable: 'THE_PASSWORD')
      ]) {
        sshCommand remote: remote,
          command: """
            somecommand \
              --username="${THE_USERNAME}" \
              --password="${THE_PASSWORD}"
          """
      }
    }
  }
}
现在Jenkins投诉并警告如下:

警告:使用Groovy字符串插值向“sshCommand”传递了一个秘密,这是不安全的

受影响的参数使用了以下变量:[u用户名、密码]

有关详细信息,请参阅

当然,我知道这是不安全的,但似乎
sshCommand
没有将任何主机环境变量传递给远程计算机

例如,我将代码更改为以下内容:

stage('Database') {
  environment {
    THE_CREDS = credentials("credential-id")
  }

  steps {
    script {
      remote = createDeployRemote()

      sshCommand remote: remote,
        command: """
          printenv

          somecommand \
              --username="\$THE_CREDS_USR" \
              --password="\$THE_CREDS_PSW"
        """
    }
  }
}
(printenv应打印凭证环境变量)

所以这里的问题是:有没有办法不使用字符串插值来存档?我在文档中找不到任何东西


谢谢。

上游问题:有关如何在命令中而不是在将要暴露的管道中解析临时环境变量的方法,请参阅插件管道文档。@MattSchuchard是的,我理解这一点,但在使用sshCommand(不是简单的sh)时,它们不可用。在这种情况下,您可能应该远程调用该命令(即API),或者将该命令封装在本地执行的可以执行SSH的东西(即Ansible)中。虽然Ansible是一个好主意,但我不喜欢在BlueOcean中看到每个命令都作为一个步骤执行。因此,我想我将坚持使用当前不太安全的解决方案,并等待ssh插件实现一些东西来传递环境变量。编辑:感谢您的努力。上游问题:有关如何在命令中而不是在将要暴露的管道中解析临时环境变量,请参阅插件管道文档。@MattSchuchard是的,我理解这一点,但在使用sshCommand(不是简单的sh)时,它们不可用。在这种情况下,您可能应该远程调用该命令(即API),或者将该命令封装在本地执行的可以执行SSH的东西(即Ansible)中。虽然Ansible是一个好主意,但我不喜欢在BlueOcean中看到每个命令都作为一个步骤执行。因此,我想我将坚持使用当前不太安全的解决方案,并等待ssh插件实现一些东西来传递环境变量。编辑:谢谢你的努力。