Bitbucket Cloud の使用を開始する
Bitbucket Cloud を初めてお使いですか? 新規ユーザー用のガイドをご利用ください。
Bitbucket Pipelines では、リポジトリごとに 1 つの SSH キーがサポートされます。ただし、パイプラインで複数のキーを使用したい場合、それらをセキュアな変数として追加し、bitbucket-pipelines.yml ファイルから参照できます。パイプラインで複数の SSH キーを設定して使用するには、次の手順に従います。
パスフレーズを持たないキー ペアを生成します。Linux または OS X の場合、ターミナルで次の操作を実行します。
1
ssh-keygen -t rsa -b 4096 -N '' -f my_ssh_key
Pipelies では、現時点では環境変数での改行がサポートされません。このため、次の操作を実行して非公開キーを base-64 エンコードします。
1
base64 -w 0 < my_ssh_key
1
base64 < my_ssh_key
1
[convert]::ToBase64String((Get-Content -path "~/.ssh/my_ssh_key" -Encoding byte))
非公開キーをリポジトリ変数として受け渡す場合、次のようなセキュリティ上のリスクがあります。
パイプラインのビルドが子プロセスを生成する場合、それらにリポジトリ変数がコピーされる。
セキュアな環境変数は、リポジトリへの書き込みアクセスを持つすべてのユーザーが取得できる。
個人の SSH キーをリポジトリ変数として渡すのではなく、セキュリティ侵害があった場合に簡単に無効化できるよう、Pipelines 用に新しい SSH キー ペアを生成することをおすすめします。デプロイメント権限と組み合わせてアクセスを制御できるデプロイメント変数を使用することもご検討ください。
暗号化されたキーをターミナルからコピーし、リポジトリのセキュアな Bitbucket Pipelines 環境変数として次のように追加します。
Bitbucket リポジトリで、[リポジトリ設定] を選択し、[Pipelines] の下で [リポジトリ変数] を選択します。
ターミナルで、base64 エンコード済みの非公開キーをコピーします。
エンコード済みのキーを環境変数の値としてペーストします。[セキュア] が選択されていることを確認します。
Pipelines がホストを認証する前に、リモート ホストに公開キーをインストールする必要があります。Pipelines ビルドにほかの Bitbucket リポジトリへのアクセス権を与えたい場合、公開キーをそのリポジトリに追加する必要があります。
サーバーへの SSH アクセスが可能な場合は、ssh-copy-id コマンドを使用できます。通常、このコマンドはリモート ホストの ~/.ssh/authorized_keys ファイルにキーを追加します。
1
ssh-copy-id -i my_ssh_key username@remote_host
サーバへの SSH アクセスをテストします。
1
ssh -i ~/.ssh/my_ssh_key user@host
.ssh ファイルを変更するのではなく作成する場合、権限の変更が必要となる場合があります。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Pipelines ビルドにほかの Bitbucket リポジトリ (ビルドの実行元とは異なるリポジトリ) へのアクセス権を与えたい場合、次の手順を実行します。
前述のステップ 1 の説明に従い、ビルドが実行されるリポジトリの設定で SSH キーを追加します (Bitbucket Pipelines で新しいキーを作成することも、既存のキーを使用することもできます)。
他の Bitbucket リポジトリ (ビルドにアクセス権を与えるリポジトリ) の設定に、SSH キー ペアの公開キーを直接追加します。
Bitbucket リポジトリに公開キーを追加する方法の詳細については、「アクセス キー」をご参照ください。
known_hosts ファイルには、ユーザーがアクセスする SSH サーバの DSA ホスト キーが格納されます。適切なリモート ホストに接続していることを確認することが重要です。Bitbucket Pipelines では、Bitbucket と GitHub サイトのフィンガープリントがすべてのパイプラインに自動的に追加されています。
リモート ホストの公開 SSH キーを含む my_known_hosts ファイルを作成します。これを行うには、ssh-keyscan コマンドを実行します。
1
$ ssh-keyscan -t rsa server.example.com > my_known_hosts
my_known_hosts ファイルを、パイプラインからアクセス可能なリポジトリにコミットします。
過去に SSH 経由でリモート ホストにアクセスしたユーザーの ~/.ssh ディレクトリから既存の known_hosts ファイルをコピーすることもできます。無関係なすべての行を削除します。
Pipelines では、ビルドごとに新しい Docker コンテナ環境が作成されます。bitbucket-pipelines.yml ファイル内で SSH キーを参照することで、SSH キーを使用できます。
パイプラインを実行する Docker コンテナ用に SSH キーを参照するには、次のコマンドを実行します。
1
2
3
4
5
6
7
8
9
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 オプションを使用します。
1
ssh -i ~/.ssh/my_other_ssh_key <user>@<host>
最終行を編集して、ファイルの転送に scp を使用したり、リモート サーバから SSH 経由でファイルをクローンするために git を使用したりするように設定することもできます。
この内容はお役に立ちましたか?