🎯 はじめに
Docker開発コンテナから git push
したら「Permission denied (publickey)」
VSCode 上ではファイルは見えるのに、なぜか .ssh
が使われてない…?
この記事は、そんな状況を実際に解決した一連の流れを記録した完全なハマりポイント集&解決まとめです。
📌 ゴール
- 開発コンテナから GitHub に SSH で安全に接続できるようにする
-
git pull
やgit push
をシームレスに行えるようにする - SSH鍵を GitHub に登録し、適切にマウント&接続確認する
🛠 環境
- ホスト:WSL2 / Linux
- コンテナ:Docker(Node.jsベース)
- GitHub:SSH接続を使用
- VSCode:DevContainer利用
1. 鍵の生成(ホスト側)
まずはホストPCで SSH鍵を作成:
ssh-keygen -t ed25519 -C "your-email@example.com"
プロンプトにはそのままEnterでOK(保存先は ~/.ssh/id_ed25519
)
2. 公開鍵のGitHub登録
生成された公開鍵を確認:
cat ~/.ssh/id_ed25519.pub
その出力内容を GitHub の SSHキー設定に貼り付けて保存
👉 https://github.com/settings/keys
3. Dockerコンテナへ鍵をマウント
# docker-compose.dev.yml の一部
volumes:
- ~/.ssh:/root/.ssh:ro
これにより、ホスト側の .ssh
がコンテナ内の /root/.ssh
にマウントされる。
私はここで、マウント元を間違えていたため解決に時間がかかりました。
(~/
でroot直下を指定する必要があります。app
直下ではないことを理解するまでに時間がかかりました。。)
4. パーミッション問題の対処
秘密鍵や設定ファイルのパーミッションが緩いと、SSHは読み込みを拒否します。
chmod 600 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/config # (あれば)
chmod 700 ~/.ssh # ディレクトリ自体
※ VSCode上でマウント先が見えなくても、/root/.ssh/
に鍵があればOKです。
5. SSH接続のテスト(コンテナ内)
コンテナに入って以下を実行:
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null git@github.com
✅ 成功すると:
Hi your-github-username! You've successfully authenticated, but GitHub does not provide shell access.
6. よくあるハマりポイントと解決
問題 | 原因 | 解決策 |
---|---|---|
.ssh/config の Bad owner or permissions
|
所有者が root でない or パーミッションが緩い |
マウントせずコンテナ内で作成 or chown root:root
|
Permission denied (publickey) |
鍵が存在しない or 形式が壊れている |
ssh-keygen で再生成、マウント確認 |
/app/.ssh に鍵が見えない |
マウント先は /root/.ssh
|
ls /root/.ssh で確認 |
libcrypto エラー |
鍵の内容が壊れている |
ssh-keygen -y -f で検証する or 再生成 |
✅ 最終確認:git push / pull
git remote -v
git push origin your-branch-name
何のエラーもなく成功すれば SSH接続&GitHub連携は完璧です。
🎉 まとめ
-
.ssh
はホストの~/.ssh
を/root/.ssh
にマウントするのが正解 -
config
ファイルは便利だが必須ではない - 所有者やパーミッションを必ずチェック
- 鍵が壊れていないか、Base64構造を見て検証できる
🙌 最後に
このプロセスを通じて「DockerとSSH、そしてGitHub」の接続を完全に理解できました。
迷ってる人は、まずは鍵を正しく作ってマウント先を確認するだけでも世界が変わるはずです。