Error: Permission denied (publickey)
「Permission denied」エラーは、サーバーが接続を却下したことを示します。 原因はいくつか考えられますが、最も一般的な例を説明します。
sudo
コマンドを Git で使用すべきか
sudo
コマンドは Git で使用するべきではありません。 sudo
を使用しなければならない特別な理由がある場合は、各コマンドで使用するようにしてください (その時点で、シェルを root として取得するために su
を使用するほうがおそらくベターです)。 sudo
なしで SSH キーを使用し、sudo git push
などのコマンドの使用を試す場合は、生成したのと同じキーを使用しないでしょう。
正しいサーバーに接続していることを確認する
キーボードで入力するというのは骨の折れる作業です。 入力内容に注意を払ってください。「githib.com」や「guthub.com」に接続することはできません。 一部の場合、企業ネットワークによって DNS レコードの解決の問題も発生します。
正しいドメインに接続していることを確かめるには、以下のコマンドを入力します:
$ ssh -vT git@hostname
> OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
> debug1: Reading configuration data /Users/you/.ssh/config
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
> debug1: Connecting tohostname
[IP ADDRESS] port 22.
接続はポート 22で行われるはずです。
常に「git」ユーザーを使用する
リモート URL 向けを含むすべての接続は、「git」ユーザーとして行われる必要があります。 GitHub Enterprise のユーザ名で接続しようとすると、失敗します:
$ ssh -T GITHUB-USERNAME@hostname
> Permission denied (publickey).
接続が失敗し、GitHub Enterpriseのユーザ名でリモート URL を使用している場合は、「git」ユーザを使用するようリモート URL を変更できます。
以下を入力して接続を確認します:
$ ssh -T git@hostname
> Hi username! You've successfully authenticated...
使用中のキーを持っていることを確認する
-
ターミナルターミナルGit Bashターミナル を開いてください。
-
プライベートキーを生成し SSH に読み込ませていることを確認します。 OpenSSH 6.7 より前のバージョンを使用している場合:
# バックグラウンドで SSH エージェントを開始
$ eval "$(ssh-agent -s)"
> Agent pid 59566
$ ssh-add -l
> 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
OpenSSH 6.8 以降のバージョンを使用している場合::
# バックグラウンドで SSH エージェントを開始
$ eval "$(ssh-agent -s)"
> Agent pid 59566
$ ssh-add -l -E md5
> 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
GitHub Desktop(https://desktop.github.com/) をインストールしてある場合は、それを使ってリポジトリをクローンできます。その場合は SSH キーを扱わずに済みます。これにはGit Bashツールも付属しています。Git Bashは Windows で git
コマンドを実行するのに推奨される方法です。
-
Git Bash を使っている場合は ssh-agent をオンにします:
# ssh-agent をバックグラウンドで起動 $ eval "$(ssh-agent -s)" > Agent pid 59566
Git for Windowsなど、他のターミナルプロンプトを使っている場合は ssh-agent を有効にしてください。
# ssh-agent をバックグラウンドで起動 $ eval $(ssh-agent -s) > Agent pid 59566
-
プライベートキーを生成し SSH に読み込ませていることを確認します。 OpenSSH 6.7 かそれより前のバージョンを使用している場合:
$ ssh-add -l > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.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/you/.ssh/id_rsa (RSA)
-
ターミナルターミナルGit Bashターミナル を開いてください。
-
プライベートキーを生成し SSH に読み込ませていることを確認します。 OpenSSH 6.7 かそれより前のバージョンを使用している場合:
# start the ssh-agent in the background $ eval "$(ssh-agent -s)" > Agent pid 59566 $ ssh-add -l > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
OpenSSH 6.8 以降を使用している場合:
# start the ssh-agent in the background $ eval "$(ssh-agent -s)" > Agent pid 59566 $ ssh-add -l -E md5 > 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
-
ターミナルターミナルGit Bashターミナル を開いてください。
-
プライベートキーを生成し SSH に読み込ませていることを確認します。 OpenSSH 6.7 より前のバージョンを使用している場合:
# start the ssh-agent in the background $ eval "$(ssh-agent -s)" > Agent pid 59566 $ ssh-add -l > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
OpenSSH 6.8 以降を使用している場合:
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
> Agent pid 59566
$ ssh-add -l -E md5
> 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
ssh-add
コマンドによって、英数字の長い文字列がプリントアウトされるはずです。 何もプリントされない場合は、新しい SSH キーを生成して GitHub Enterpriseと関連付ける必要があります。
参考: 多くのシステムでは、デフォルトの秘密鍵 (~/.ssh/id_rsa
、~/.ssh/id_dsa
および ~/.ssh/identity
) は、SSH 認証エージェントに自動追加されます。 キーの生成時にファイル名を上書きしていない限り、ssh-add path/to/key
を実行する必要はありません。
詳細を確認する
git@[hostname]
への接続を試して、キーが使用されていることを確認することもできます。
$ ssh -vT git@hostname
> ...
> 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@hostname
> ...
> 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 Enterprise に提供して、安全な接続を確立する必要があります。
-
ターミナルを開きます。
-
バックグラウンドで SSH エージェントを開始します。
$ eval "$(ssh-agent -s)" > Agent pid 59566
-
自分の公開鍵のフィンガープリントを見つけてメモします。 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)
-
任意のページの右上で自分のプロフィール画像をクリックし、[Settings] をクリックします。
-
ユーザ設定のサイドバーで [SSH and GPG keys] をクリックします。
-
SSH キーのリストを、
ssh-add
コマンドの出力と比較します。
-
コマンドラインを開きます。
-
バックグラウンドで SSH エージェントを開始します。
$ ssh-agent -s > Agent pid 59566
-
自分の公開鍵のフィンガープリントを見つけてメモします。 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)
-
任意のページの右上で自分のプロフィール画像をクリックし、[Settings] をクリックします。
-
ユーザ設定のサイドバーで [SSH and GPG keys] をクリックします。
-
SSH キーのリストを、
ssh-add
コマンドの出力と比較します。
-
ターミナルを開きます。
-
バックグラウンドで SSH エージェントを開始します。
$ eval "$(ssh-agent -s)" > Agent pid 59566
-
自分の公開鍵のフィンガープリントを見つけてメモします。 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)
-
任意のページの右上で自分のプロフィール画像をクリックし、[Settings] をクリックします。
-
ユーザ設定のサイドバーで [SSH and GPG keys] をクリックします。
-
SSH キーのリストを、
ssh-add
コマンドの出力と比較します。
-
ターミナルを開きます。
-
バックグラウンドで SSH エージェントを開始します。
$ eval "$(ssh-agent -s)" > Agent pid 59566
-
自分の公開鍵のフィンガープリントを見つけてメモします。 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)
-
任意のページの右上で自分のプロフィール画像をクリックし、[Settings] をクリックします。
-
ユーザ設定のサイドバーで [SSH and GPG keys] をクリックします。
-
SSH キーのリストを、
ssh-add
コマンドの出力と比較します。
GitHub Enterprise で公開鍵が見つからない場合は、GitHub Enterprise に SSH キーを追加してコンピュータと関連付ける必要があります。
警告: 見慣れない SSH キーが GitHub Enterprise で見つかった場合は、すぐにそれを削除し、さらに支援が必要な場合は GitHub Enterprise サイト管理者 に問い合わせてください。 確認できない公開鍵は、潜在的なセキュリティ上の問題を示している可能性があります。 詳細は「SSH キーをレビューする」を参照してください。