はじめに
WSL上でGitを使う場合、HTTPSではなくSSHで接続したいケースがあります。
この記事では、Windows側で使っていたSSH鍵がWSLで使えなかった経緯を含め、WSL用のSSH鍵を新規作成してGitHubに登録し、SSH接続を確立するまでの手順をまとめます。
前提
- 作業環境はWSL上のUbuntu
- GitHubアカウントは作成済み
- GitHubのprivateリポジトリは作成済み
- すでにHTTPSでは
git pushできている - 以前SourceTreeをWindows側で使用しており、PuTTY形式の秘密鍵(
.ppk)が存在していた
今回のゴール
WSL上でGitHub用のSSH鍵を新しく作成し、GitHubに公開鍵を登録して、SSH接続できるようにする。
なぜSSH接続できなかったのか
Windows側のSourceTreeで使っていた.ppk形式の秘密鍵をWSLへコピーし、権限を設定しました。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa_github.ppk
ls -la ~/.ssh/
total 16
drwx------ 2 username username 4096 May 4 19:11 .
drwxr-x--- 15 username username 4096 May 4 18:42 ..
-rw------- 1 username username 1611 Feb 9 20:40 id_rsa_github.ppk
-rw-r--r-- 1 username username 142 May 4 18:40 known_hosts
まずSSH接続を試みました。
ssh -T git@github.com
git@github.com: Permission denied (publickey).
.ppkファイルを明示的に指定しても失敗しました。
ssh -i ~/.ssh/id_rsa_github.ppk -T git@github.com
Load key "/home/username/.ssh/id_rsa_github.ppk": error in libcrypto
git@github.com: Permission denied (publickey).
error in libcryptoというエラーから、WSLのOpenSSHはPuTTY形式の.ppkを直接読み込めないことがわかりました。
SourceTree用の.ppk鍵は、WSLのOpenSSHではそのまま利用できません。 WSL用に新しくSSH鍵を作成する必要があります。
WSL用のSSH鍵を作成する
以下のコマンドで、ed25519形式のSSH鍵を新規作成します。
ed25519は現在よく使われるSSH鍵の形式のひとつです。今回はGitHub用のSSH鍵としてed25519形式で作成します。
ssh-keygen -t ed25519 -C "任意のコメント(例:WSL Ubuntu)"
保存先はデフォルトのままEnterを押します。
Enter file in which to save the key (/home/username/.ssh/id_ed25519):
学習用途のためパスフレーズは空のままEnterを押します。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
本番環境や業務用途では、パスフレーズを設定することを推奨します。
コマンドが完了すると、~/.ssh/以下に以下の2ファイルが生成されます。
| ファイル | 種別 |
|---|---|
id_ed25519 |
秘密鍵(絶対に共有しない) |
id_ed25519.pub |
公開鍵(GitHubに登録する) |
公開鍵を確認する
以下のコマンドで公開鍵の内容を表示します。
cat ~/.ssh/id_ed25519.pub
ssh-ed25519から始まる1行が出力されます。この内容を次の手順でGitHubに登録します。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... WSL Ubuntu
GitHubに公開鍵を登録する
GitHubで以下の順に進みます。
- 右上のアイコンをクリック
- Settings
- SSH and GPG keys
- New SSH key
入力内容は以下のとおりです。
| 項目 | 入力値 |
|---|---|
| Title | 任意の名前(例:WSL Ubuntu) |
| Key type | Authentication Key |
| Key |
cat ~/.ssh/id_ed25519.pubで表示した公開鍵を貼り付け |
二段階認証を設定している場合は、追加時に認証を求められます。画面に従って通過してください。
SSH接続を確認する
WSLで以下を実行して、SSH接続が成功するか確認します。
ssh -T git@github.com
以下のメッセージが出れば成功です。
Hi your-github-username! You've successfully authenticated, but GitHub does not provide shell access.
but GitHub does not provide shell access.という文言は、GitHubがSSHログイン用のシェルを提供していないため表示されるもので、正常な動作です。
リモートURLをHTTPSからSSHへ変更する
対象のプロジェクトディレクトリへ移動します。
cd ~/projects/your-project
リモートURLをSSH形式へ変更します。
git remote set-url origin git@github.com:your-github-username/your-repository.git
your-github-usernameとyour-repositoryは、実際のGitHubのユーザー名とリポジトリ名に置き換えてください。
git remote -vで確認する
リモートURLが正しく変更されているか確認します。
git remote -v
以下のようにSSH形式のURLに変わっていれば完了です。
origin git@github.com:your-github-username/your-repository.git (fetch)
origin git@github.com:your-github-username/your-repository.git (push)
git statusで同期状態を確認する
最後に、ローカルとリモートの状態を確認します。
git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
これでHTTPSからSSHへの切り替えが完了しました。
今回のポイント
- Windows側のSourceTree用
.ppk鍵は、WSLのOpenSSHではそのまま利用できない -
Permission denied (publickey)はSSH公開鍵認証に失敗している状態 -
.ppkを指定した場合、error in libcryptoが出る - WSL用に新しくed25519形式のSSH鍵を作成する
- GitHubに登録するのは
.pubの公開鍵のみ - 秘密鍵は絶対に共有しない
-
ssh -T git@github.comでSSH接続の確認ができる -
git remote set-url origin SSH_URLでHTTPSからSSHへ切り替えられる -
git remote -vで現在の接続方式を確認できる
まとめ
WSLからGitHubへSSH接続するために、WSL用のSSH鍵を新しく作成し、GitHubに公開鍵を登録しました。
その後、ssh -T git@github.comで認証成功を確認し、既存リポジトリのリモートURLをHTTPSからSSHへ変更しました。
これにより、WSL上のGit操作でSSH経由のgit pushが使えるようになりました。