Bitbucket Pipelines で SSH キーを使用する

次のような場合、Bitbucket Pipelines で SSH キーをセットアップすることができます。

  • ビルドで Bitbucket やその他のホスティング サービスとの認証を行い、非公開の依存関係を取得する必要がある
  • デプロイで、アーティファクトをアップロードする前にリモート ホストまたはサービスとの認証を行う必要がある
  • ビルドで SSH、SFTP、または SCP などのツールを使用したい

Bitbucket Cloud のリポジトリに SSH の公開キーと非公開キーのペアを追加し、公開キーをリモート サービスまたはマシンに追加する必要があります。

Bitbucket のリポジトリに SSH キーを追加すると、そのリポジトリへの書き込みアクセス権を持つすべてのユーザーがリモート ホストへのアクセス権を持ちます。 

Bitbucket Cloud リポジトリへのプッシュや Bitbucket Cloud リポジトリからのプルで SSH を使用したい場合、「SSH キーのセットアップ」をご参照ください。

Bitbucket リポジトリでの 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 キー ペアの生成方法 (推奨):

  1. リポジトリの [設定] で、[Pipelines] の [SSH キー] に移動します。
  2. [キーの生成] をクリックして新しい SSH キー ペアを作成します。

後述のステップ 2 に進みます。

既存のキー ペアを追加する方法:

キーの要件が Bitbucket の 2048 ビットの RSA キーとは異なる場合は、既存のキー ペアを使用することもできます。

セキュリティ上の理由により、個人の SSH キーを追加することは推奨されません。既存の bot のキーを使用することをおすすめします。

既存のキーを追加する方法の詳細についてはこちらをクリックしてください
  1. リポジトリの [設定] で、[SSH キー] に移動します。 
  2. Paste the private and public keys into the provided fields, then click Save key pair:

ステップ 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

If you are creating, rather than modifying the .ssh files you may need to change their permissions

  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys

他の Bitbucket Cloud リポジトリ

Pipelines ビルドにほかの Bitbucket リポジトリ (ビルドの実行元とは異なるリポジトリ) へのアクセス権を与えたい場合、次の手順を実行します。

  1. 前述のステップ 1 の説明に従い、ビルドが実行されるリポジトリの設定で SSH キーを追加します (Bitbucket Pipelines で新しいキーを作成することも、既存のキーを使用することもできます)。
  2. Add the public key from that SSH key pair directly to settings for the other Bitbucket repo (i.e. the repo that your builds need to have access to). 
    See Access keys for details on how to add a public key to a Bitbucket repo.

パイプラインで複数の SSH キーを使用する

Bitbucket Pipelines では、リポジトリについて 1 つの SSH キーがサポートされます。ただし、パイプラインで複数のキーを使用したい場合、Bitbucket Pipelines のセキュアな環境変数として追加し、bitbucket-pipelines.yml ファイルから参照することで実現できます。

複数の SSH キーを使用する方法についての詳細はこちらをクリックしてください

1: (必要に応じて) SSH キーを生成する 

パスフレーズを持たない RSA キー ペアを生成します。Linux または OS X の場合、ターミナルで次の操作を実行します。

$ ssh-keygen -t rsa -b 4096 -N '' -f my_ssh_key

2: 非公開キーを暗号化する

Pipelies では、現時点では環境変数での改行がサポートされません。このため、次の操作を実行して非公開キーを base-64 エンコードします。

Linux
$ base64 -w 0 < my_ssh_key
Mac OS X
$ base64 < my_ssh_key

3: キーをセキュアな環境変数として追加する

非公開キーを環境変数として受け渡す場合、次のようなセキュリティ上のリスクがあります。

  • パイプラインのビルドが子プロセスを生成する場合、それらに環境変数がコピーされる。
  • セキュアな環境変数は、リポジトリへの書き込みアクセスを持つすべてのユーザーが取得できる。

環境変数として個人の SSH キーを設定するのではなく、セキュリティ侵害があった場合に簡単に無効化できるよう、Pipelines 用に新しい SSH キー ペアを生成することをおすすめします。

暗号化されたキーをターミナルからコピーし、リポジトリのセキュアな Bitbucket Pipelines 環境変数として次のように追加します。

  1. Bitbucket のリポジトリで、[設定] > [環境変数] の順に選択します。
  2. ターミナルで、base64 エンコード済みの非公開キーをコピーします。
  3. Paste the encoded key as the value for an environment variable. Make sure to check Secured.

    See Environment variables in Bitbucket Pipelines for more information. 

4: 公開キーをリモート ホストにインストールする

前述のステップ 3 の説明に従い、リモート ホストに公開キーを追加します。

5: my_known_hosts ファイルを作成してリポジトリに追加する

known_hosts ファイルには、ユーザーがアクセスする SSH サーバの DSA ホスト キーが格納されます。適切なリモート ホストに接続していることを確認することが重要です。Bitbucket Pipelines では、Bitbucket と GitHub サイトのフィンガープリントがすべてのパイプラインに自動的に追加されています。

  1. リモート ホストの公開 SSH キーを含む my_known_hosts ファイルを作成します。これを行うには、次のコマンドを実行します。

    $ ssh-keyscan -t rsa server.example.com> my_known_hosts
  2. my_known_hosts ファイルを、パイプラインがアクセス可能なリポジトリにコミットします。

過去に SSH 経由でリモート ホストにアクセスしたユーザーの ~/.ssh ディレクトリから既存の known_hosts ファイルをコピーすることもできます。無関係なすべての行を削除します。

6: bitbucket-pipelines.yml ファイルですべての情報を関連付ける

Pipelines では、ビルドごとに新しい Docker コンテナ環境が作成されます。bitbucket-pipelines.yml ファイル内で SSH キーを参照することで、SSH キーを使用できます。 

パイプラインを実行する Docker コンテナ用に SSH キーを参照するには、次のコマンドを実行します。

bitbucket-pipelines.yml
image: node:6    # specify your Docker image here
pipelines:  
  default:
    - step:
        script:
           - mkdir -p ~/.ssh
           - cat my_known_hosts >> ~/.ssh/known_hosts
           - (umask  077 ; echo $MY_SSH_KEY | base64 --decode > ~/.ssh/id_rsa)
           - ssh <user>@<host> 'echo "connected to `host` as $USER"'


前述の例では、ホストに接続し、echo コマンドで「connected to 'host' as <user>」を指定しています。

最終行の ssh コマンドは、既定の SSH 情報が使用されることにご注意ください。異なるキーを指定するには、次のように -i オプションを使用します。

ssh -i ~/.ssh/my_other_ssh_key <user>@<host>

最終行を編集して、ファイルの転送に scp を使用したり、リモート サーバから SSH 経由でファイルをクローンするために git を使用したりするように設定することもできます。

最終更新日 2018 年 7 月 10 日

この翻訳に満足しましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.