Git for WindowsからMSYS2へ乗り換えてgit push等をしようとしたら、エラーPermission denied (publickey)が発生した。
gitのエラーの調査
参考: Git - 環境変数
環境変数GIT_TRACEを設定すると、gitは処理の詳細を表示する。
例えばgit pushのエラー箇所を調べたい場合は下記のように実行する。
$ GIT_TRACE=true git push
sshがPermission denied (publickey)でコケていた。
~/.ssh配下の公開鍵などが読めていないっぽい。
sshのエラーの調査
参考: githubにsshで接続しようとした時にはまった - WhereToStart
オプション-vを設定すると、sshは処理の詳細を表示する。
例えばbitbuket.orgへのアクセス時の動作を確認したい場合は下記のように実行する。
$ ssh -vT bitbucket.org
/home/ymdymd/.ssh配下のファイルを読んでいた。$HOMEはそこじゃないのに。
sshが~/.sshを参照するようにする
参考: msys2での$HOMEとOpenSSHでのホームディレクトリの違い - Qiita
ホームディレクトリを変更したくて$HOMEを設定していたが、MSYS2のsshは、それを認識してくれないらしい。
ユーザー名ymdymdの場合、以下を実施した。
- 旧ホームディレクトリ
/home/ymdymdを削除する -
D:/MyHomeを新$HOMEとしたいので、/etc/fstabにD:/MyHome /home/ymdymdを追記する
※ /etc/fstab設定後は/home/ymdymdでD:/MyHomeにアクセスする筈
これでOpenSSHが$HOME/.ssh/configを読んでくれるようになった。
しかしもう一つすることがある。
~/.ssh 以下ファイルのパーミッションを変更する
参考: SSHが鍵認証されないとき、パーミッションを疑え。 - それマグで!
~/.ssh等が他人から変更可能だと危険なので(危険だと判断してsshがコケるので)パーミッションを変更する。
$ find ~/.ssh | xargs chmod 755
では確認してみよう。
$ ssh -vT bitbucket.org
OpenSSH_7.3p1, OpenSSL 1.0.2j 26 Sep 2016
debug1: Reading configuration data /home/MyHome/.ssh/config
:
略
:
debug1: Exit status 0
アクセス成功。この後めちゃくちゃgit pushした。
git-credential-manager for Windows を入れて認証を省略
参考: Git Credential Manager for Windows (GCM) のアップデート(v0.9 Beta) | OPC Diary
おまけ。認証情報を管理してくれる仕組み。
Git for Windowsだと標準で入っていたが、MSYS2に乗り換えたので自分で入れる。
GitHub - Microsoft/Git-Credential-Manager-for-Windows: Secure Git credential storage for Windows.
Releaseからgcmw-<バージョン>.zipをDLし、下記どちらかを実施する。
-
install.cmdを実行 -
install.cmd、LICENSE.TXT、README.md以外の9ファイルを/usr/lib/git-coreに配置する
通常はどちらでもよいのだろうが、自分の場合はGit for Windowsのインストール情報をレジストリに書いてしまっていたため、install.cmdが期待通り動作しなかった。