Bitbucket Pipelines で SSH キーを使用する

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

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

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

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

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

Bitbucket リポジトリでの SSH の使用については次のページをご参照ください。

Not all available Docker images have SSH installed by default. If you are using the default pipelines image you'll be fine, but if you need to specify your own image, make sure SSH is either already installed, or install it with your script.

For example, depending on your image, including in your script:

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 キー ペアの生成方法 (推奨):

  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 リポジトリへのアクセス権を与えたい場合、公開キーをそのリポジトリに追加する必要があります。

リモート ホスト

If you have SSH access to the server, you can use the ssh-copy-id  command. Typically, the command appends the key to the ~/.ssh/authorized_keys file on the remote host:

$ 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. 前述のステップ 1 の説明に従い、ビルドが実行されるリポジトリの設定で SSH キーを追加します (Bitbucket Pipelines で新しいキーを作成することも、既存のキーを使用することもできます)。
  2. 他の Bitbucket リポジトリ (ビルドにアクセス権を与えるリポジトリ) の設定に、SSH キー ペアの公開キーを直接追加します。
    Bitbucket リポジトリに公開キーを追加する方法の詳細については、「アクセス キー」をご参照ください。

パイプラインで複数の 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: Create the my_known_hosts file and add it to your repo

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

  1. Create the my_known_hosts file that includes the public SSH key of the remote host. You can do this by executing the following command:

    $ ssh-keyscan -t rsa server.example.com > my_known_hosts
  2. Commit the my_known_hosts file to your repository from where your pipeline can access it.

Alternatively, you can copy an existing known_hosts file from the ~/.ssh directory of a user who has previously accessed the remote host via SSH. You can remove all unrelated lines.

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>」を指定しています。

Note that the ssh command in the final line will use your default SSH identity. To specify a different key, use the -i option like this:

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

You can also modify the last line to use scp to transfer files or git to clone files from a remote server via SSH.

最終更新日: 2018 年 9 月 24 日

この内容はお役に立ちましたか?

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