Utilizzare il back-end OTP VHSS SSH con Jenkins


8

Sto configurando Vault per memorizzare i segreti. Il backend SSH con l'autenticazione OTP sembra un buon modo per interrompere la gestione delle chiavi SSH per l'accesso.

Ho il backend SSH funzionante e sto cercando di collegare Jenkins con l'autenticazione SSH-OTP in modo che io possa rimuovere anche le chiavi di distribuzione.

Ho guardato i plugin di Jenkins per Vault, ma funzionano solo per recuperare segreti da Vault.

Ci sono plugin o hack di Jenkins per questo scopo o, in caso contrario, è possibile scrivere uno dei miei?

Nota : in questo momento, Jenkins utilizza le chiavi SSH. Voglio eliminare l'uso delle chiavi e configurare Jenkins per ottenere un OTP SSH da Vault ogni volta che deve SSH in un host per una distribuzione.


Potresti spiegare cosa non funziona?
030

1
Se usi abbreviazioni, definiscile la prima volta. Nel frattempo, suppongo che intendi Password SSH One-Time quando parli di OTP. Puoi anche aggiungere collegamenti alla documentazione che hai letto alla domanda.
030

Potresti indicare se hai risolto il problema?
030

Risposte:


1

Ho guardato i plugin di Jenkins per Vault, ma funzionano solo per recuperare segreti da Vault.

Dipende dall'aspetto della configurazione corrente utilizzato per distribuire le app.

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

Se si utilizzano pipeline Jenkins, è possibile sostituire il keyId con quello definito nel deposito di 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'
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.