メイン画像

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 以下でないとダメらしい。
(参考→公開鍵認証が通らない件について

ということは、グループのパーミッションから書き込み権限を削除すれば良さそう。

  1. ユーザーを git (/home/git ディレクトリの所有者)に変える。
    (うちの git ユーザーはログインシェルを git-shell にしているので、-s オプションも付けて bash を使うよう指定)

    [john@hogehost ~]$ su -s /bin/bash - git
  2. chmod コマンドでディレクトリのグループのパーミッションを変更する。

    [git@hogehost ~]$ chmod g-w /home/git/
  3. パーミッションが変更されたことを確認する。

    [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 以下であることを確認しよう。


アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事