GitHub の Organization Private リポジトリーへデプロイ用にアクセスする方法
GitHub の Organization で作成している Private リポジトリーに対して、デプロイ環境 (Amazon EC2 インスタンス) からアクセスする方法について調査。
実現したいこと
- リポジトリーに「読み取り専用」でアクセスする。
- セキュアでそこまで面倒でない方法。
GitHub Docs にまとまっていた。
5 つの方法があるが、上から順に推奨している方法と思われるので、その順に試す。
- SSH エージェントのフォワーディング
OAuth トークンを使った HTTPS でのクローニングデプロイキーサーバー間トークンマシンユーザ
「1. SSH エージェントのフォワーディング」でうまくいったので、この方法を採用する。
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 でクローンできることを確認して完了!
とりあえず実現できたけど、読み取り専用アクセスではない。
また、CI などでは SSH 転送エージェントが有効にならないため、GitHub操作できない。
仕切り直し・・。