0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLからGitHubへSSH接続する手順

0
Posted at

はじめに

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で以下の順に進みます。

  1. 右上のアイコンをクリック
  2. Settings
  3. SSH and GPG keys
  4. 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-usernameyour-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が使えるようになりました。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?