Open4

GitHub の Organization Private リポジトリーへデプロイ用にアクセスする方法

rabitarochanrabitarochan

GitHub の Organization で作成している Private リポジトリーに対して、デプロイ環境 (Amazon EC2 インスタンス) からアクセスする方法について調査。

実現したいこと

  • リポジトリーに「読み取り専用」でアクセスする。
  • セキュアでそこまで面倒でない方法。
rabitarochanrabitarochan

GitHub Docs にまとまっていた。

https://docs.github.com/ja/developers/overview/managing-deploy-keys

5 つの方法があるが、上から順に推奨している方法と思われるので、その順に試す。

  1. SSH エージェントのフォワーディング
  2. OAuth トークンを使った HTTPS でのクローニング
  3. デプロイキー
  4. サーバー間トークン
  5. マシンユーザ

「1. SSH エージェントのフォワーディング」でうまくいったので、この方法を採用する。

rabitarochanrabitarochan

SSH エージェントのフォワーディング

ドキュメントには、Windows ユーザーが実行するのが面倒と書いてあった。
Windows から接続するのでちょうどいい。

1. SSH キーを生成する

PowerShell を起動し、次のコマンドを実行する。

(SSH キーペアを生成する)
> ssh-keygen -t ed25519 -C "<GitHubに登録しているメールアドレス>"

> Enter a file in which to save the key: <キーファイル名>
> Enter passphrase: <パスフレーズ>
> Enter same passphrase again: <パスフレースを再度入力>

今回は、%USERPROFILE%\.ssh\id_github_ed25519 に保存するように作成した。

2. ssh-agent 起動設定

Windows サービス管理画面より、「OpenSSH Authentication Agent」 のプロパティを開く。
スタートアップの種類が「無効」になっていたので、「自動」に変更。
その後、サービスを開始する。

次のコマンドを実行し、ssh-agent が起動されている (Status = Running) ことを確認する。

(サービス ssh-agent の情報を取得する)
> Get-Service -Name ssh-agent

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

3. SSH キーを ssh-agent に追加する

次のコマンドを実行し、SSH プライベートキーを ssh-agent に追加する。

(SSH 秘密鍵を ssh-agent に登録する)
> ssh-add $env:USERPROFILE\.ssh\id_github_ed25519
Enter passphrase for ....\.ssh\id_github_ed25519:
Identity added: ....\.ssh\id_github_ed25519 (メールアドレス)

Identity added と表示されたら完了。

4. GitHub アカウントへの新しい SSH キーの追加

次のコマンドを実行し、SSH 公開鍵をクリップボードにコピーする。
※エディターで SSH 公開鍵を開き、コピーしてもいい。

(SSH 公開鍵をクリップボードにコピーする)
> Get-Content $env:USERPROFILE\.ssh\id_github_ed25519.pub | Set-Clipboard

ブラウザーで GitHub を開き、ユーザーの [Settings] > [SSH and GPG keys] の 「SSH keys」に SSH 公開鍵を登録する。

5. 動作確認 (ローカルPC)

次のコマンドを実行し、GitHub に SSH 接続する。

(Windows から GitHub への SSH 接続を試す)
> ssh -T git@github.com
Hi rabitarochan! You've successfully authenticated, but GitHub does not provide shell access.

Hi rabitarochan! のように、GitHub ユーザー名が表示されればOK。

6. 動作確認 (ローカルPC --[SSH]-> Amazon EC2)

動作確認のコマンドを、SSH 接続先の Amazon EC2 インスタンスでも実行する。

(Amazon EC2 インスタンスに SSH 接続する)
> ssh -A amazon-ec2-instance

(Amazon EC2 インスタンスから GitHub への SSH 接続を試す)
$ ssh -T git@github.com
Hi rabitarochan! You've successfully authenticated, but GitHub does not provide shell access.

ローカルPCと同様に、GitHub ユーザー名が表示されればOK。

GitHub リポジトリーから SSH でクローンできることを確認して完了!

rabitarochanrabitarochan

とりあえず実現できたけど、読み取り専用アクセスではない。
また、CI などでは SSH 転送エージェントが有効にならないため、GitHub操作できない。

仕切り直し・・。