web-dev-qa-db-ja.com

Githubアクション-シークレットをファイルに保存する方法

私はかなり基本的なシナリオを持っています。私はこの目的のために専用のsshキーを作成し、それを私のリポジトリシークレットに追加しました。

  1. コードはmasterにプッシュされます

  2. GitHubアクションは、echo "${{ secrets.SSH_KEY }}" > keyを実行することにより、sshを使用してサーバーにアップロードします。

  3. その後、このキーを使用してサーバーに接続できます。 ssh -i key [email protected] lsb_release -a

問題は、何らかの理由でGitHubアクションがファイルに書き込めず、実際のシークレット値の代わりに文字***をファイルに書き込むことです。したがって、明らかにサーバーに接続できません。

このシークレットを使用してSSHに接続するにはどうすればよいですか?ファイルを使用せずに接続する方法はありますか? GitHubアクションを使用してこの一般的なシナリオを実行した人は、いくつかの光を当てることができますか?

2
Stan

良い解決策は、gpgを使用してキーを暗号化し、それをリポジトリに追加して、サーバー上でパスフレーズを使用して復号化することです。パスフレーズはもちろんgithubプロジェクトシークレットとして保存する必要があります。

詳細はこちら: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets

0
Stan

GitHubアクションは、この方法でファイルにシークレットを書き込むことができるはずです。星が表示される理由は、ログがフィルター処理されているためです。シークレットがログに記録される場合、ログでは3つのアスタリスクに置き換えられます。ログは公開されていることが多いため、これは秘密の偶発的な開示に対するセキュリティ対策です。

ただし、可能であれば、シークレットをログに書き込まないようにすることをお勧めします。次のようにコマンドを記述して、シークレットをログに書き込まないようにすることができます。

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

ログに表示されるのはecho "$SSH_KEY" > keyだけで、シークレットやアスタリスクはありません。

>文字はYAMLにとって特別なので、ここでは引用符が必要です。

これでサーバーにログインできない場合は、別の問題が発生している可能性があります。この手法は、一般的なケースでシークレットを作成するために機能します。

4
bk2204