Site cover image

Site icon imageおかしんワークス

ビジネステクノロジーエンジニア @okash1n のブログです

Visual Studio CodeのRemote ContainersからもGitを使う方法

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を登録
💡
Linuxの場合
$ ssh-add ~/.ssh/id_ed25519
💡
Macの場合
$ 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-clientsocatをインストールしてください

$ 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