web-dev-qa-db-fra.com

Actions Github - Comment puis-je enregistrer un secret dans un fichier

J'ai un scénario assez basique. J'ai créé une clé ssh dédiée à cet effet et l'ai ajoutée à mes secrets de référentiel.

  1. Le code est poussé vers master

  2. L'action GitHub le télécharge sur le serveur en utilisant ssh en faisant echo "${{ secrets.SSH_KEY }}" > key.

  3. Après cela, je peux utiliser cette clé pour me connecter à mon serveur, par exemple ssh -i key [email protected] lsb_release -a

Le problème est que, pour une raison quelconque, les actions GitHub ne peuvent pas l'écrire dans un fichier, il écrit des caractères *** au lieu de la valeur secrète réelle dans le fichier. Par conséquent, je ne peux évidemment pas me connecter à mon serveur.

Comment puis-je me connecter avec ssh en utilisant ce secret? Existe-t-il un moyen de se connecter sans utiliser de fichier? Quelqu'un qui a réalisé ce scénario courant en utilisant des actions GitHub peut-il faire la lumière?

7
Stan

La bonne solution est d'utiliser gpg pour crypter la clé, l'ajouter à un référentiel et la décrypter sur le serveur en utilisant la phrase de passe. La passprase doit être stockée en tant que secret de projet github bien sûr.

Plus d'informations sur comment je l'ai fait ici: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets

0
Stan

Les actions GitHub devraient pouvoir écrire un secret dans un fichier de cette façon. La raison pour laquelle vous voyez les étoiles est que le journal est filtré, donc si un secret est consigné, il est remplacé dans le journal par trois astérisques à la place. Il s'agit d'une mesure de sécurité contre une divulgation accidentelle de secrets, car les journaux sont souvent accessibles au public.

Cependant, c'est une bonne idée d'éviter d'écrire le secret dans le journal de toute façon si possible. Vous pouvez écrire votre commande comme ceci afin de ne pas écrire le secret dans le journal:

    - run: 'echo "$SSH_KEY" > key'
      Shell: bash
      env:
        SSH_KEY: ${{secrets.SSH_KEY}}

Tout ce que vous verrez dans le journal est echo "$SSH_KEY" > key, Pas le secret ni aucun astérisque.

Notez que vous voulez des guillemets ici, car le caractère > Est spécial pour YAML.

Si cela ne fonctionne pas pour vous connecter à votre serveur, il y a probablement un problème différent; cette technique fonctionne pour écrire des secrets dans le cas général.

4
bk2204