Skip to main content

Error: Permission denied (publickey)

「Permission denied」エラーは、サーバーが接続を却下したことを示します。 原因はいくつか考えられますが、最も一般的な例を説明します。

Platform navigation

sudo コマンドまたは管理者特権を Git で使用する必要がありますか?

sudo コマンドや管理者特権 (管理者権限など) を Git で使用しないでください。 あなたが使用_しなければならない_非常に良い理由sudoがある場合は、すべてのコマンドでそれを使用していることを確認してください(おそらくその時点でシェルをルートとして取得するために使用suすることをお勧めします)。 sudo を使用せずに SSH キーを生成して、sudo git push のようなコマンドを使用しようとすると、生成したものと同じキーは使用されません。

正しいサーバーに接続していることを確認する

キーボードで入力するというのは骨の折れる作業です。 入力内容に注意を払ってください。「githib.com」や「guthub.com」に接続することはできません。 一部の場合、企業ネットワークによって DNS レコードの解決の問題も発生します。

正しいドメインに接続していることを確かめるには、以下のコマンドを入力します:

$ 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 over HTTPS を使用するように設定をオーバーライドしない限り、接続はポート 22 で行う必要があります。

常に「git」ユーザを使用する

リモート URL 向けを含むすべての接続は、「git」ユーザとして行われる必要があります。 GitHub のユーザ名で接続しようとすると、失敗します:

$ ssh -T GITHUB-USERNAME@github.com
> Permission denied (publickey).

接続が失敗し、GitHub のユーザー名でリモート URL を使用している場合は、"git" ユーザーを使用するようリモート URL を変更できます。

以下を入力して接続を確認します:

$ ssh -T git@github.com
> Hi USERNAME! You've successfully authenticated...

使用中のキーを持っていることを確認する

  1. [ターミナル][ターミナル][Git Bash] を開きます。

  2. プライベートキーを生成し SSH に読み込ませていることを確認します。

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

GitHub Desktop をインストール済みの場合、これを使って SSH キーを扱わずにリポジトリをクローンできます。

  1. Git Bash を使用している場合は、ssh-agent を有効にします。

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    

    Git for Windows など別のターミナル プロンプトを使用している場合は、ssh-agent を有効にします。

    # start the ssh-agent in the background
    $ eval $(ssh-agent -s)
    > Agent pid 59566
    

    注: 上記の eval コマンドは、環境内で ssh-agent を手動で開始します。 ssh-agent が既にバックグラウンド システム サービスとして実行されている場合、これらのコマンドは失敗する可能性があります。 その場合は、お使いの環境に関連するドキュメントを確認してください。

  2. プライベートキーを生成し SSH に読み込ませていることを確認します。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  1. [ターミナル][ターミナル][Git Bash] を開きます。

  2. プライベートキーを生成し SSH に読み込ませていることを確認します。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

このコマンドは ssh-add 、数字と文字の長い文字列を出力 する必要があります 。 何も出力されない場合は、新しい SSH キーを生成し、それを GitHub に関連付ける必要があります。

ヒント: ほとんどのシステムでは、既定の秘密キー (~/.ssh/id_rsa および ~/.ssh/identity) が SSH 認証エージェントに自動的に追加されます。 キーを生成するときにファイル名をオーバーライドしない限り、ssh-add path/to/key を実行する必要はありません。

詳細を確認する

git@github.com に接続してキーが使用されていることを確認することもできます。

$ ssh -vT git@github.com
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type -1
> debug1: identity file /Users/YOU/.ssh/id_rsa-cert type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa-cert type -1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Trying private key: /Users/YOU/.ssh/id_rsa
> debug1: Trying private key: /Users/YOU/.ssh/id_dsa
> debug1: No more authentication methods to try.
> Permission denied (publickey).

この例では、SSH が使用するキーはありませんでした。 「identity file」行の最後の「-1」は、SSH が使用するファイルを見つけることができなかったことを示します。 その後、「Trying private key」の行でもファイルが見つからなかったことが示されています。 ファイルが存在する場合は、これらの行はそれぞれ「1」と「Offering public key」になります。

$ ssh -vT git@github.com
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type 1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Offering RSA public key: /Users/YOU/.ssh/id_rsa

公開鍵がアカウントに添付されていることを確認する

公開鍵を GitHub に提供して、安全な接続を確立する必要があります。

  1. ターミナルを開きます。

  2. バックグラウンドで SSH エージェントを開始します。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. 自分の公開鍵のフィンガープリントを見つけてメモします。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 任意のページで、右上隅にあるプロファイルの画像をクリックし、次に[設定]をクリックします。

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. サイドバーの [アクセス] セクションで、 [ SSH キーと GPG キー] をクリックします。

  6. SSH キーのリストを、ssh-add コマンドの出力と比較します。

  1. コマンドラインを開きます。

  2. バックグラウンドで SSH エージェントを開始します。

    $ ssh-agent -s
    > Agent pid 59566
    
  3. 自分の公開鍵のフィンガープリントを見つけてメモします。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 任意のページで、右上隅にあるプロファイルの画像をクリックし、次に[設定]をクリックします。

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. サイドバーの [アクセス] セクションで、 [ SSH キーと GPG キー] をクリックします。

  6. SSH キーのリストを、ssh-add コマンドの出力と比較します。

  1. ターミナルを開きます。

  2. バックグラウンドで SSH エージェントを開始します。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. 自分の公開鍵のフィンガープリントを見つけてメモします。 OpenSSH 6.7 より前のバージョンを使用している場合:

    $ ssh-add -l
    > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    

    OpenSSH 6.8 以降を使用している場合:

    $ ssh-add -l -E md5
    > 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 任意のページで、右上隅にあるプロファイルの画像をクリックし、次に[設定]をクリックします。

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. サイドバーの [アクセス] セクションで、 [ SSH キーと GPG キー] をクリックします。

  6. SSH キーのリストを、ssh-add コマンドの出力と比較します。

GitHub で公開キーが見つからない場合は、GitHub に SSH キーを追加してコンピューターと関連付ける必要があります。

警告: 見慣れない SSH キーが GitHub で見つかった場合は、すぐにそれを削除してください。さらに支援が必要な場合は GitHub サポート ポータル にお問い合わせください。 確認できない公開鍵は、潜在的なセキュリティ上の問題を示している可能性があります。 詳しくは、「SSH キーをレビューする」を参照してください。