Permission denied (publickey,gssapi-with-mic) の対処法。ホームディレクトリのパーミッションを確認せよ
Permission denied (publickey,gssapi-with-mic) の対処法。ホームディレクトリのパーミッションを確認せよ
Permission denied (publickey,gssapi-with-mic) の対処法を説明する。
状況
git のリモートリポジトリからフェッチできなくなった。
エラーには「Permission denied (publickey,gssapi-with-mic).」と出力されている。
C:\Users\username\Source\Repos\ConsoleApp>git fetch
git@hogehost: Permission denied (publickey,gssapi-with-mic).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
このエラーは git ではなく SSH に関するものだった。
SSH コマンドでも同じエラーが発生した。
C:\Users\username\Source\Repos\ConsoleApp>ssh git@hogehost
git@hogehost: Permission denied (publickey,gssapi-with-mic).
対処
サーバーに接続して原因を確かめる。
セキュリティログ(/var/log/secure)を確認する。
どうやら /home/git ディレクトリの所有権またはモードが正しくないのが原因らしい。
[john@hogehost ~]$ sudo cat /var/log/secure
:(略)
Aug 31 10:36:48 hogehost sshd[23270]: Authentication refused: bad ownership or modes for directory /home/git
Aug 31 10:36:48 hogehost sshd[23270]: Connection closed by 192.168.1.3 [preauth]
/home/git ディレクトリのパーミッションは、以下のようになっていた。
[john@hogehost ~]$ ls -ld /home/git/
drwxrwsr-x 18 git git 4096 8月 30 16:58 /home/git/
参考にしたページより、公開鍵認証方式では SSH 接続ユーザーのホームディレクトリのパーミッションは 755 以下でないとダメらしい。
(参考→公開鍵認証が通らない件について)
ということは、グループのパーミッションから書き込み権限を削除すれば良さそう。
-
ユーザーを git (/home/git ディレクトリの所有者)に変える。
(うちの git ユーザーはログインシェルを git-shell にしているので、-s オプションも付けて bash を使うよう指定)[john@hogehost ~]$ su -s /bin/bash - git
-
chmod コマンドでディレクトリのグループのパーミッションを変更する。
[git@hogehost ~]$ chmod g-w /home/git/
-
パーミッションが変更されたことを確認する。
[git@hogehost ~]$ ls -ld ~ drwxr-sr-x 18 git git 4096 8月 30 16:58 /home/git/./
これで接続できるようになったはず。
検証
クライアントから試したところ、SSH 接続できるようになった。
(ログインシェルが git-shell なのでその旨のエラーは出る。これで OK )
C:\Users\username\Source\Repos\ConsoleApp>ssh git@hogehost
Last login: Wed Aug 30 16:33:14 2023 from 192.168.1.3
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to hogehost closed.
リモートリポジトリからフェッチできるようになった。
(git fetch コマンドでエラーが出なくなった)
C:\Users\username\Source\Repos\ConsoleApp>git fetch
まとめ
SSH 接続で「Permission denied (publickey,gssapi-with-mic).」のエラーが出たら、接続ユーザーのホームディレクトリのパーミッションが 755 以下であることを確認しよう。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?