我正在设置保管箱以存储机密。带有OTP身份验证的SSH后端似乎是停止管理用于访问的SSH密钥的好方法。

我有SSH后端工作,并且正在考虑使用SSH-OTP身份验证连接Jenkins,以便删除部署密钥也是如此。

我查看了用于保险库的Jenkins插件,但它们仅用于从Vault中获取机密。

是否有用于此目的的插件或任何Jenkins黑客,否则,是否有可能自己写一个?

注意:现在,Jenkins使用SSH密钥。我想消除密钥的使用,并配置Jenkins在每次需要SSH到某个主机进行部署时从Vault获取SSH OTP。

评论

您能解释一下什么不起作用吗?

如果使用缩写,请在第一次定义它们。同时,我假设您在谈论OTP时是指一次性SSH密码。您还可以添加已阅读到该问题的文档链接。

你能指出你是否解决了这个问题?

#1 楼


我查看了用于Vault的Jenkins插件,但它们仅用于从Vault中获取机密。


这取决于当前配置用于部署应用程序的方式。

https://github.com/jenkinsci/hashicorp-vault-plugin

如果使用Jenkins管道,则可以使用在其中定义的keyId替换keyId Hashicorp保险库。


node {
  // define the secrets and the env variables
  def secrets = [
      [$class: 'VaultSecret', path: 'secret/testing', secretValues: [
          [$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'value_one'],
          [$class: 'VaultSecretValue', envVar: 'testing_again', vaultKey: 'value_two']]],
      [$class: 'VaultSecret', path: 'secret/another_test', secretValues: [
          [$class: 'VaultSecretValue', envVar: 'another_test', vaultKey: 'value']]]
  ]

  // optional configuration, if you do not provide this the next higher configuration
  // (e.g. folder or global) will be used
  def configuration = [$class: 'VaultConfiguration',
                       vaultUrl: 'http://my-very-other-vault-url.com',
                       vaultCredentialId: 'my-vault-cred-id']

  // inside this block your credentials will be available as env variables
  wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
      sh 'echo $testing'
      sh 'echo $testing_again'
      sh 'echo $another_test'
  }
}