SSHが鍵認証されないとき、パーミッションを疑え。 – ブックマクロ開発に
これがうっかり777になってた。ホームディレクトリが777だと永遠にauthorized_keysは無効化される。
気付くまでに30時間くらい試行錯誤して週末が消えた。
ああ…そうなのか…
結果的にこうしたら上手くいきました。
- /home/usename [0755]
- /.ssh [0700]
- authorized_keys [0600]
- /.ssh [0700]
一応、認証できているユーザーを参考にパーミッションのチェックもしていたはずなんですけど、場当たり的に変更してたせいで、一つを正しく設定したのに他の一つを間違って設定→混乱みたいなことやってました。最終的には「.ssh」ディレクトリのパーミッションが777になってました。間抜けすぎ。家族みんなで鍵掛けて最終的に開いてました的な。パーミションをいい加減に設定したらダメだね。
上手くいかないからとりあえず777にして様子見るとか良くやっちゃうんだけど、777にするとauthorized_keysが無効化されるとはおもわなんだ…
おまけ:複数の公開鍵を一つのユーザーに設定する
ユーザーA、B、Cの3人が設定されているサーバで作業用共通アカウント「commonuser」を設定するような場合、commonuser用の公開鍵を作って秘密鍵を3人に渡すという方法もあるけど、3人の公開鍵をcommonuserに設定する方がより合理的で面倒がない(秘密鍵の受け渡しは面倒)commonuserを作成し、commonuserのauthorized_keysにそれぞれの公開鍵を追加していけばOK。
ユーザー作成とauthorized_keysの準備
# useradd commonuser
# passwd commonuser
# su - commonuser
$ mkdir ~/.ssh
$ chmod 0700 ~/.ssh
$ touch ~/.ssh/authorized_keys
公開鍵を追加
sudoで$ sudo cat /home/userA/.ssh/authorized_keys >> ~/.ssh/authorized_keys
$ sudo cat /home/userB/.ssh/authorized_keys >> ~/.ssh/authorized_keys
$ sudo cat /home/userC/.ssh/authorized_keys >> ~/.ssh/authorized_keys
もしくはrootになって
$ su -
# cat /home/userA/.ssh/authorized_keys >> /home/commonuser/.ssh/authorized_keys
# cat /home/userB/.ssh/authorized_keys >> /home/commonuser/.ssh/authorized_keys
# cat /home/userC/.ssh/authorized_keys >> /home/commonuser/.ssh/authorized_keys
「>>」を間違って「>」にすると追記でなくて上書きになってしまうので注意。
蛇足的な感想:SSH2の公開鍵認証の仕組みって本当にシンプル
SSHの設定も大分慣れてきました。で、いつも思うんですけど、SSH2の公開鍵認証の仕組みって本当にシンプルに出来てるよね。凄い。簡単に言うとこんな感じ。
(図はこちらからお借りしました。)
ユーザー名って公開鍵の場所を指定するのに使うだけで、認証自体には使ってないのねぇ。秘密鍵も鍵セット生成時に設定したパスワードも通信に乗ることはなくて、あくまで公開鍵で暗号化したものをローカルで復号するだけ。なんと合理的。暗号化の方式を強化すればシステム自体の強度を上げることが出来る…のかな。
昔はもっと複雑な仕組みが、それこそ僕が理解できないような仕組みが動いていると思い込んでいて、何か上手くいかないことが起きた場合にはどこを見ればわからないとパニックになったもんですが、こうやって眺めてみると登場人物は極端に少なくて、チェックする項目もとても少ない。
そうだったのかー
(そういえば同じ事はSSLでも言ったような気がする…)