(2015/02/18 追記)
続編(というなの結論修正)を書きました
⇛ 公開鍵はどこで作成すべき?(続)
タイトルに対する結論を最初に書くと、
SSH の接続先
で作成するのが、楽。
(正確には接続先の ~/root/.ssh/)
なぜそういう結論に至ったのか、
忘れないうちにメモしておこう。
なぜか公開鍵認証が通らない
アクセス権や所有権の設定は間違いないはず。
mkdir -m 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
うっかり忘れてしまうやつ。
これは何度も確認した。
iptables も確認したし、
パスワード認証を試すと通るから問題ないはず。
もしかして: SELinux
いろいろ調べていく中で、SELinuxというワードを見て思い出した。
Disable にしていない!
きっとそのせいだ…と思いつつ試してみると、
:
debug1: Trying private key: ***_rsa
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
通った…。
だがしかし納得がいかない。
どのみち SELinux は Disable にするから問題は解決するんだけど、
なぜ通らないのか気になるので調べていたら、
ssh-keygen コマンドや ssh-copy-id コマンドなどで ~/.ssh 直下に公開鍵を"直接"作成した場合などは問題ありませんが、別のホストから持ってきた公開鍵を一時的にどこかのディレクトりに配置してから ~/.ssh に移動した場合は sshd(sshd_t)から公開鍵が読み取れず(読み取る権限がなく)エラーになってしまいます。
SELinuxが有効な環境でSSH公開鍵認証を使う
http://2done.org/76.html
のだそう。
公開鍵は PuTTY もしくは他のサーバで作って転送するのが常だったが、
それをすると SELinux コンテキストが正しくセットアップされないようだ。
というわけで、引用元にもある通り、
restorecon -R -v /home/$ACCOUNT/.ssh
と実行して、無事公開鍵認証が通るようになった。
結論
そんなこんなで解決はしたが…
最初から SSH の接続先で鍵生成していれば何の問題もなかったわけで、
冒頭に出した結論に至った、というわけです。
追記
iwaim@github さんにコメントを頂いてから、ひとつ疑問が。
それって危なくないか?
一時的とはいえ、秘密鍵を接続先のサーバに置くのってどうなんだろう。
置き忘れることだってあるかもしれない。
…と考えると、楽 だけど 危ない やり方なのか。