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
が期待通り動作しなかった。