Bitbucket Pipelines で SSH キーを使用する
次のような場合、Bitbucket Pipelines で SSH キーをセットアップすることができます。
- ビルドで Bitbucket やその他のホスティング サービスとの認証を行い、非公開の依存関係を取得する必要がある
- デプロイで、アーティファクトをアップロードする前にリモート ホストまたはサービスとの認証を行う必要がある
- ビルドで SSH、SFTP、または SCP などのツールを使用したい
Bitbucket Cloud のリポジトリに SSH の公開キーと非公開キーのペアを追加し、公開キーをリモート サービスまたはマシンに追加する必要があります。
Bitbucket のリポジトリに SSH キーを追加すると、そのリポジトリへの書き込みアクセス権を持つすべてのユーザーがリモート ホストへのアクセス権を持ちます。
Bitbucket Cloud リポジトリへのプッシュやプルを問題なく実行できるはずです。ただし、SSH を使用する必要がある場合 (bot アカウントを使用する場合など) やブランチ権限が有効になっている場合は、「SSH キーのセットアップ」を参照してください。
Bitbucket リポジトリでの SSH の使用については次のページをご参照ください。
すべての利用可能な Docker イメージに SSH がデフォルトでインストールされているわけではありません。デフォルトのパイプライン イメージを使用している場合は問題は起こりませんが、独自のイメージを指定する必要がある場合、SSH がすでにインストールされていることを確認するか、スクリプトを使用してインストールするようにします。
たとえば、イメージに応じて、スクリプトに以下を含めます。
apt-get update -y
apt-get install -y ssh
ステップ 1: Bitbucket に SSH キーを追加する
新しい SSH キー ペアを生成することをおすすめしますが、キーの要件が Bitbucket の 2048 ビットの RSA キーとは異なる場合は既存のキー ペアを使用することもできます。いずれの方法で SSH キーを追加する場合も、非公開キーはビルドのパイプラインに追加 SSH キーとして自動的に追加され、bitbucket-pipelines.yml ファイルで指定する必要はありません。
ビルドのパイプラインが利用できる SSH キーが Docker イメージにすでに含まれていて、この手順で SSH キーを追加する必要がない場合、ステップ 2 に進んでください。
Pipelines で使用する SSH キーにはパスフレーズを含めないでください。
Bitbucket Pipelines では、リポジトリについて 1 つの SSH キーがサポートされます。複数のキーを使用したい場合、Bitbucket Pipelines のセキュアな環境変数として追加し、bitbucket-pipelines.yml ファイルから参照することができます。後述の「複数の SSH キーの使用」をご参照ください。
新しい SSH キー ペアの生成方法 (推奨):
- リポジトリの [設定] で、[Pipelines] の [SSH キー] に移動します。
- [キーの生成] をクリックして新しい SSH キー ペアを作成します。
後述のステップ 2 に進みます。
既存のキー ペアを追加する方法:
キーの要件が Bitbucket の 2048 ビットの RSA キーとは異なる場合は、既存のキー ペアを使用することもできます。
セキュリティ上の理由により、個人の SSH キーを追加することは推奨されません。既存の bot のキーを使用することをおすすめします。
ステップ 2: 既知のホストを更新する
Pipelines では、リモート ホストのフィンガープリントやホスト アドレスを保存したり調査したりすることができます。これにより、リモート ホストが提供した公開キーがそのホストの ID に一致するかどうかを視覚的に確認して、なりすましや中間者攻撃を検出することができます。また、そのホストとの以降の通信を自動的に検証済みにすることができます。
リポジトリの [設定] で [SSH キー] に移動し、既知のホストのアドレスを追加します。ホストのフィンガープリントを表示するには、[フェッチ] をクリックします。
Bitbucket Pipelines では、Bitbucket と GitHub サイトのフィンガープリントがすべてのパイプラインに自動的に追加されています (ただし、前述のユーザー インターフェイスには表示されません)。
ステップ 3: リモート ホストに公開キーを追加する
Pipelines がホストを認証する前に、リモート ホストに公開キーをインストールする必要があります。Pipelines ビルドにほかの Bitbucket リポジトリへのアクセス権を与えたい場合、公開キーをそのリポジトリに追加する必要があります。
リモート ホスト
サーバへの SSH アクセスが可能な場合、ssh-copy-id
コマンドを使用できます。このコマンドは一般に、リモート ホストの ~/.ssh/authorized_keys
ファイルにキーを追加します。
$ ssh-copy-id -i my_ssh_key user@host
サーバへの SSH アクセスをテストします。
ssh -i ~/.ssh/my_ssh_key user@host
.ssh ファイルを変更するのではなく作成する場合、権限の変更が必要となる場合があります。
- chmod 700 ~/.ssh
- chmod 600 ~/.ssh/authorized_keys
他の Bitbucket Cloud リポジトリ
Pipelines ビルドにほかの Bitbucket リポジトリ (ビルドの実行元とは異なるリポジトリ) へのアクセス権を与えたい場合、次の手順を実行します。
- 前述のステップ 1 の説明に従い、ビルドが実行されるリポジトリの設定で SSH キーを追加します (Bitbucket Pipelines で新しいキーを作成することも、既存のキーを使用することもできます)。
- 他の Bitbucket リポジトリ (ビルドにアクセス権を与えるリポジトリ) の設定に、SSH キー ペアの公開キーを直接追加します。
Bitbucket リポジトリに公開キーを追加する方法の詳細については、「アクセス キー」をご参照ください。
パイプラインで複数の SSH キーを使用する
Bitbucket Pipelines では、リポジトリについて 1 つの SSH キーがサポートされます。ただし、パイプラインで複数のキーを使用したい場合、それらをセキュアな変数として追加し、bitbucket-pipelines.yml ファイルから参照できます。