Visual Studio CodeのRemote Container(devcontainer)から開発する際に、コンテナ内からもGitリポジトリにプッシュなどしたいケースがあると思います。何も設定していない場合は当然コンテナにはSSHの鍵が無いのでリポジトリを操作できません。それを出来るようにします。
TL;DR
ssh-agent
をバックグラウンドで動かして鍵を追加しておくとRemote Containers
拡張機能がうまいことやってくれるよ- 間違ってもコンテナ内でSSH Keyを作ったり、ホストの
~/.ssh
をマウントしたりするんじゃないよ - WSLのLinuxとMacは若干ハマりポイントがあるぞ
- 公式に全部書いてるよ
参考資料
方法
たまに、コンテナ内でもsshをセットアップして鍵を作るようにしたり、ホストの.ssh
をコンテナ側からマウントしたりする方法を見かけますが、Visual Studio CodeのRemote Containers拡張機能にはホストの資格情報を共有する機能が備わっているので、そういった方法は必要ありません。
SSH Keyをssh-agent
に追加する
こちらのドキュメント通りに設定していれば、すでに完了しているはずですが、ssh-keygen
とGitHubのSSH Key登録だけ行って、ローカルのssh-agent
への追加をしていない人も多いのではないでしょうか?
SSH Keyを使ってGitHubのリポジトリを操作するだけなら、ssh-keygen
して、鍵を登録するだけで事足りてしまうし、そのように解説しているブログ記事なども多いです。
鍵は作ってある前提で、ssh-agent
に登録する方法を以下に記載します。
ssh-agentをバックグラウンドで起動
$ eval "$(ssh-agnet -s)"
Agent pid 47401
SSH Keyを登録
$ ssh-add ~/.ssh/id_ed25519
$ ssh-add --apple-use-keychain ~/.ssh/id_ed25519
鍵の名前はGitHubに登録したものを設定してください。
ssh-agent がログイン時に起動されるようにする
~/.bash_profile
や~/.zprofile
に以下を追記しておきます
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
これでターミナルやVS Code、必要に応じてコンテナも再起動すると、コンテナ内からホストのSSH Keyを用いてGitを操作できるようになります。
Linux (WSL)でうまくいかない場合
以下を実行してopenssh-client
とsocat
をインストールしてください
$ sudo apt update
$ sudo apt install openssh-client
$ sudo apt install sudo apt install socat
Macでうまくいかない場合
~/.ssh/config
が存在していないか、内容が間違っていることが原因です。
なければ作成して以下を追記しましょう。
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519