はじめに
git cloneをしようとしたとき、以下のようなエラーが起こったことはないでしょうか。
PS E:\workspace\Python\latin-descendant-predictor\data\colab> git clone git@github.com:halhorn/deep_dialog_tutorial.git
Cloning into 'deep_dialog_tutorial'...
Load key "C:\\Users\\paka\\.ssh\\": Is a directory
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
私も同じエラーに直面したので、本記事ではその解決に至った経緯を記載します。
ユーザーの環境によっては解決策が違って役に立たないかも知れませんが、誰かの一助になることを望みます。
正しいサーバーに接続しているか確認
git@gtihbu.comなど、サーバー名を打ち間違えていると当然ですが接続できないのでそこをまず確認します。[1]
$ ssh -vT git@github.com
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/you/.ssh/config
> debug1: Reading configuration data /etc/ssh/ssh_config
> debug1: /etc/ssh/ssh_config line 47: Applying options for *
> debug1: Connecting to github.com port 22.
ssh関連のコマンドがWindowsはあまり揃っていないので、私はWSL2を使ってやりました。
以下、特に説明がない限りWSL2を使っているとします。
ログが見切れますが、その場合はファイルに出力してください。
ssh -vT git@github.com > log.txt
使用中のキーを持っていることを確認
SSHを使うには、プライベートキー・パブリックキーのペアが必要なので、その準備をします。
まず、ssh-agent を有効にします。
$ eval "$(ssh-agent -s)"
> Agent pid 59566
次に、既にプライベートキーを生成しSSHに読み込ませているかを確認します。
$ ssh-add -l -E sha256
> 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
ここで上記のように長い英数字が表示される場合、プライベートキーはSSHに読み込まれています。
表示されない場合、読み込まれていません。その場合、キーを新たに作成します。
SSHキーの生成
ssh-keygen
でキーを生成します。[2]
$ ssh-keygen -t ed25519 -C "your_email@example.com"
> Generating public/private algorithm key pair.
ed25519は何でも結構です。"your_email@example.com"は自分のメールアドレスにしてください。
> Enter a file in which to save the key (/c/Users/you/.ssh/id_algorithm):[Press enter]
/c/Users/you/.ssh/id_algorithm
が既定の場所となりますので、Enterを押してください。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
パスワードを同じものを2回入れてください。
SSH キーを ssh-agent に追加
SSHプライベートキーをssh-agent に追加します(.pubが付いているものではありません)。
$ ssh-add ~/.ssh/id_ed25519
SSHキーをGitHubに登録
SSHパブリックキー(プライベートキーではないです)をクリップボードにコピーします。[3]
clip.exe < id_ed25519.pub
GitHubの任意のページで右上隅にあるプロファイルの画像をクリックし、次に設定をクリックします。
サイドバーの [アクセス] セクションで、 SSH キーと GPG キー(SSH and GPG keys)をクリックします。
[SSH keys]で、[New SSH key]、もしくは[Add SSH key]をクリックします。
- Title: 分かりやすい説明をつけてください。例えば、「職場のデスクトップ」など
- Key type: Authentication Key
- Key: 先程コピーしたSSHパブリックキーを貼り付けてください
[Add SSH key]をクリックしてください。
ssh_configの設定
ssh_configの設定をします。Git for windowsの場合
C:\Program Files\Git\etc\ssh\ssh_config
にssh_configがあります。
Host github.com
User git
HostName github.com
IdentityFile (プライベートキーのパス)
IdentitiesOnly yes
通信の確認
root@home-PC:/mnt/c/users/paka/.ssh# ssh -T git@github.com
Enter passphrase for key '/root/.ssh/id_ed25519':
Hi Dixhom! You've successfully authenticated, but GitHub does not provide shell access.
きちんとGitHubと通信が取れるようです。
git clone
Powershell
PS E:\workspace\Python\latin-descendant-predictor\data\colab> git clone git@github.com:halhorn/deep_dialog_tutorial.git
Cloning into 'deep_dialog_tutorial'...
Enter passphrase for key 'C:\Users\paka\.ssh\id_ed25519':
remote: Enumerating objects: 150, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (15/15), done.
Receiving objremote: Total 150 (delta 8), reused 0 (delta 0), pack-reused 135
Receiving objects: 100% (150/150), 3.59 MiB | 2.04 MiB/s, done.
Resolving deltas: 100% (66/66), done.
Checking connectivity... done.
成功しました!
総括
原因はSSHキーでした。
参考
- [1] https://docs.github.com/ja/authentication/troubleshooting-ssh/error-permission-denied-publickey
- [2] https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- [3] https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account