[Mac]Remote Container内からホストのSSH鍵を利用してGitHubにPushする方法

VSCode Remote Containerで立てたコンテナ内からGitHubにpushしてみる

今更感のあるお話ですが、調べてもあまり日本語の記事が出てこなかったので書いておくことにしました。

何も設定していないコンテナ内からプライベートリポジトリにgit pushしようとすると、アクセス権がありませんと怒られます。

このエラーの原因はコンテナ内のgitが適切なSSH鍵を見つけられないためです。

そこでホストのSSH鍵の情報を利用できれば、GitHubアカウントにアクセスできる訳です。

しかし安直に、別環境へ秘密鍵をコピーするのは安全上問題があります。

そこでssh-agentを利用します。

ssh-agentはssh-addで登録したSSH鍵を使い、公開鍵認証を代行します。

鍵を転送して直接認証を行うのではなく、認証を代行するという点が大きな違いです。

まず、リモートコンテナにはホストPCからSSHを通じてアクセスしています。

そこで、リモートコンテナでGitHubの認証を求められた時に、ssh-agentが代わりに認証をしてあげるという仕組みです。

VS Codeはホストでssh-agentが起動していたら、認証リクエストをホストのssh-agentに自動で転送してくれます。

手順

ホストPC上のSSH鍵をAgentに登録します。

$ ssh-add ~/.ssh/id_rsa
$ eval "$(ssh-agent -s)"

を実行して秘密鍵をAgentに登録し、ssh-agentを起動します。

.zshrcに

if [ -z "$SSH_AUTH_SOCK" ]; then
   # Check for a currently running instance of the agent
   RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
   if [ "$RUNNING_AGENT" = "0" ]; then
        # Launch a new instance of the agent
        ssh-agent -s &> $HOME/.ssh/ssh-agent
   fi
   eval `cat $HOME/.ssh/ssh-agent`
fi

を追記し、自動起動するようにします。その後

$ source ~/.zshrc

でzshrcを再読み込みすればOKです。

これでremote containerからでもプライベートリポジトリへのgit pushなどが通るようになります。