Help us understand the problem. What is going on with this article?

CentOSで鍵認証しようとがんばっても `Permission denied` となるあなたへ

More than 1 year has passed since last update.

最初に

CentOSのお話です

鍵認証でいくら試しても、何度も権限周りを見直しても下記のように Permission denied と言われて心が折れたあなたへ。

deploy@hostname: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

TL;DR

以下の条件に当てはまる場合はSELinuxを無効にして試してみてください

  • 権限まわりはモニタに穴が空くほど見直した
  • SSHでログインしようとしているユーザのホームディレクトリが、/home配下以外
  • SELinuxが有効

Permission denied は、権限の問題だ

本来 Permission denied であればほぼサーバ/クライアントの鍵関連の権限が問題です。
Qiitaでもこれまで何度も記事になっているので、ぐぐってください(他力本願)

それでもいくら権限周りを確認しても間違いはないよ…

もしかして、下記の条件に当てはまりませんか?もしそうならここが終着点です🐳

  • SSHでログインしようとしているユーザのホームディレクトリが、/home配下以外
  • SELinuxが有効

ええ、SELinuxのしわさです👿

問題切り分けのためにとりあえずの対応

SELinuxを無効にしてください。これでログインできるようになると思います。多分。
💭ただ、/var/log/audit/audit.log にそれっぽいログが見つからなかったんだよなぁ…

sudo setenforce 0

何が問題だったのか?

そもそもの原因はユーザのホームディレクトリを /home ではなく既存の別のディレクトリに配置したこと。SELinuxはディレクトリ毎に専用のラベルをもっています。
以下の home_root_t とか user_home_dir_t が今回ハマった箇所。

# ls -laZ /home
drwxr-xr-x. root    root    system_u:object_r:home_root_t:s0 .
dr-xr-xr-x. root    root    system_u:object_r:root_t:s0      ..
drwx------. vagrant vagrant unconfined_u:object_r:user_home_dir_t:s0 vagrant

もしホームディレクトリを別のところに移す場合、上記のようなラベルを張り直さないといけないのですが、新規ディレクトリならまだしも既存のディレクトリ(たとえば var 等)の場合は用途を考えると張り直すことができない場合も😇

最後に

SELinuxは厄介なものですが、基本セキュリティを守るものです。ホームディレクトリ配下をWeb公開したりとか、今回のようにホームディレクトリを既存ディレクトリ配下にしてしまうとか、セキュリティリスクが高いものに対してきちんと守ってくれます。

ただ、とにかく存在を忘れやすいのと、ググると大体 SELinuxを無効に とあってなかなか理解が深まらないものですよね。いつか時間をかけてきちんと理解できたらいいなーと思いつつ。

y-amadatsu
大分県の離島、姫島村でプログラマしています。
https://www.ruby-dev.jp/
ruby-dev
Ruby開発はRuby on Railsをコア技術とし、Web系から基幹系まで多様な開発に携わっています。
https://www.ruby-dev.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away