問題の経緯
- 環境:Windows7,8,10 64bit
-
git push origin master
したときに"permission denied"エラーが出たときのトラブルシューティングメモ - 今までgitはGit for Windowsから落として、付属してきたmingw32ターミナル上からコマンドぺちぺち打ち込んでた。
- 最近ターミナルエミュレータcmder導入した。
- fullバージョン落としたらgit付属してきた。
- cmder上でmsysとかmingw開いてgitしたかった。
cmder上でmingw開いて
git add .
とgit commit -m"なんちゃらかんちゃら"
まではコマンド通るのにgit push origin master
すると
Permission denied (publickey).
fatal: Could not read from remote repository.
解決法
公開鍵作る
git for windowsのときは勝手にやってくれたのかな?公開鍵作った覚えない
コマンドプロンプト上でgit-bash立ち上げる
git-bashを開く(C:\Users{USERNAME}\AppData\Local\GitHubみたいな感じの、gitの入っているところに環境変数のパスが通っているならコマンドラインにgit-bash
と打ち込んでgit shellが開く)
$ git-bash
別にgit-bashでなくてもよいんではないか疑惑。
bashなら何でもいいんじゃない?
ssh-keygen走らせる
$ cd ~/.ssh #"~"はホームディレクトリの意味。
$ ssh-keygen -t rsa -C "mymailaddress@gmail.com"
ホームディレクトリはLinuxユーザーなら常識。
windowsユーザーなら、ホームディレクトリとして環境変数にHOMEの名前で 追加しておくとよい。
Win+pause > 詳細設定 > 環境変数
で環境変数の設定に行ける。
例)HOME C:\Users<YourName>\Documents
僕はDropbox内にホームディレクトリ作ってます。
ホームディレクトリに
ssh-keygen
がない?Cmderのgit-for-windowsを使い始めて分かったけど、
ssh-keygen.exe
は<Cmderインストールディレクトリ>Cmder\vendor\git-for-windows\usr\bin\ssh-keygen.exe
にあるようだ
さて、ssh-keygen
走らせるとこんなん表示される。
Generating public/private rsa key pair.
Enter file in which to save the key (/e/Users/U1and0/Dropbox/Program/.ssh/id_rsa):
書いてあるように
public/private rsa key pair
が
generate`された
ようだ。うーむよくわからん。
さらに続いて
Enter file in which to save the key (/e/Users/U1and0/Dropbox/Program/.ssh/id_rsa):
とある。さっき指定したHOMEディレクトリにrsa作るつもりらしい。
言われたからENTER押す。
するとこう言ってくる。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
ということでパスワードを設定(確認含めて2回打つ。)
追記
パスワードはなくても動く!(←よく理解していない人のコメント)
pushするたびにパスワード聞かれなくて楽だ
↑empty for no passphraseとあるからなくてもおかしくない?
ということでパスワード打たずにEnter二回押す。
Your identification has been saved in /e/Users/U1and0/Dropbox/Program/.ssh/id_rsa.
Your public key has been saved in /e/Users/U1and0/Dropbox/Program/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:**********************************
The key's randomart image is:
+---[RSA 2048]----+
| ..oo. |
| . . . ** ** |
| . + =** .|
| + + @ ** . |
| . ***** . |
| + o =.oo|
| . . o***o|
| **+|
| .=X@|
+----[SHA256]-----+
identificationとpublic keyが%HOME%/.ssh
ディレクトリ下のid_rsa
とid_rsa.pub
というファイルに作られたようだ。
ssh-keygenからここまでの流れ↓
sshエージェント走らせる
Generating an SSH keyによると
eval $(ssh-agent -s)
と打ってバックグラウンドにsshエージェントとやらを走らせる
そうするとなんか数字が返ってくる
$ eval $(ssh-agent -s)
Agent pid {数字が5桁くらい}
sshエージェントに公開鍵を追加する
$ ssh-add <HOMEディレクトリ>/.ssh/id_rsa (+パスワード?) #←打ち込む。パスワードなければそのままエンター
Enter passphrase for **************/.ssh/id_rsa: ←こんなの返ってくる
Identity added: *******************************_rsa (**********)
idコピーする
clip < ~/.ssh/id_rsa.pub
と打ち込む。
するとクリップボードに長々とidがコピーされるので、Adding a new SSH key to your GitHub accountに従いgithubのSetting>SSH keys>Keyの欄に"ssh-rsa"の文字を取り除いて貼り付ける。"ssh-rsa"取り除くと怒られる。Titleはテキトーに。
GitHubに公開鍵を追加
ブラウザ開いてGitHubの設定のページへ。
githubのSetting>SSH keys>Keyの欄に貼り付ける。Titleはテキトーに。
Bitbucketに公開鍵を追加
同様にBitbucketのssh設定ページへ飛び(アカウント→設定→SSH鍵→鍵を追加)、クリップボードにコピーしたid_rsa.pubの中身を貼り付ける。
参考
githubへpushできないときの対処(permission denied)
Generating an SSH key