SSH鍵登録不備の通知に関する話
- angel_p_57
- 2964
- 11
- 0
- 0
先に簡単に結論
- パーミッション関係で不備があって公開鍵認証うまくいかないても、パスワード認証通せばデバッグ情報から分かるよ
- 2010年のOpenSSH 5.6からある機能なので、今なら大抵どこでも使えるはず
- OpenSSHクライアント(sshコマンド)以外でも、クライアントソフトが対応してたら情報は見られるよ
発端はこのような思い付きから。
sshで認証鍵の公開鍵を登録する時のトラブルって良く見るけど、「ちゃんと登録できたかどうか」は実際にログインしないと確かめられないってのもどうかな、という気もする。
2020-04-30 08:58:40パーミッション設定ミスってるって話は…。パスワード認証でログインすれば教えてくれるってのがあったような。 twitter.com/ttdoda/status/…
2020-04-30 08:59:35OpenSSHで公開鍵認証する時にauthorized_keysや.sshディレクトリのパーミッションの問題で蹴られるってのはよく有る事だけど、実はssh -vでパスワード認証でログインすると debug1: Remote: Ignored authorized keys: bad ownership or modes for directory /home/sue って教えてくれるんだよね
2019-12-16 18:43:52なんか、RHEL/CentOS7系のだと、そういうのなかった記憶があったんだけどどうだろう。うろ覚えかもしれない。どのバージョンからかは確かめたいかな。
2020-04-30 09:00:55手元のCentOS7/OpenSSH 7.4p1だとあったな > パスワード認証成功時の authorized_keysファイルパーミッション不備通知 twitter.com/angel_p_57/sta…
2020-04-30 11:35:39これただ、SSHの通信開始時のやりとりで、サーバからのデバッグ情報っぽいのを受け取る仕組みがあるってことだよね。どこら辺見ると分かるかな。あと、クライアントがSSH以外の場合も分かるのかな。
2020-04-30 09:03:18あ、ぼけてる。「OpenSSH以外の場合」だ。 それはそれとして「どんな鍵が登録されてるか」チェックするツール、あっても良い気がするんだよね…。だって、ユーザがいくら「正しく登録した!」って思っても、判断するのはサーバなんだし。
2020-04-30 09:05:02OpenSSHのソース片かき集めたらフツーに作れそうな気がする。問題は、サーバの設定と照らし合わせないとあんま意味がないことで、sgidで設定見られるよう権限つける? ってのが微妙かな。 ※基本的にsshd_configは一般ユーザには見られない
2020-04-30 09:06:47…sshd_configが一般ユーザから見られないって、別に必須要件じゃないか。でもあんまり見せたいものではないよねえ。
2020-04-30 09:13:18ここで「いつからある機能か」について情報をいただきました
@angel_p_57 翻訳では sshd(8) を ssh(8) に typo してますが、 unixuser.org/~haruyama/secu… の "sshd(8) will now queue" で始まるところが対応しそうに見えます。 なお、ls -Zしないと分からんようなやつ(SELinux絡み)は検出できなさそうです。 github.com/openssh/openss…
2020-04-30 19:51:56OpenSSH 5.6 のリリースノートで紹介されている機能で、このリリースが(翻訳前のテキストによると)2010年8月なので、10年前からあるってことに。
@kaoru6 ちょうどソースを追っていたんですが、認証成功後の do_authenticated() の中でデバッグ情報を送る auth_debug_send() という仕組みがあって、事前に情報を追加する auth_debug_add() が、幾つかのエラー項目にあてられているようでした。このcommitでパーミッション不備も対象に、ということですね
2020-04-30 20:32:12@kaoru6 多分ですが、SELinux絡みだと単純にopen(2)に失敗してそれで終わりですね。扱いはファイルなしとあまり変わりませんが、一応「ファイルがあるのに失敗」ということで、サーバのデバッグログとしては残るようです。
2020-04-30 20:46:48デバッグ情報の通知に関してちょっと踏み込んだ情報
これについてはもともとSSH2に"Debug Message"というメッセージ種 (メッセージ番号4) が定義されていて、デバッグ情報がいつでも送れる。それを認証に関する不備の情報伝達に使ってるわけね。 twitter.com/angel_p_57/sta…
2020-04-30 21:15:25このRFC4253の11.3章に載ってた。番号が4ってのは12章。 でもって、ssh -vvv でデバッグレベル3にしておけば、件の情報出力の直前に "debug3: receive packet: type 4" ってのが出てわかるようになっている。 tools.ietf.org/html/rfc4253
2020-04-30 21:18:18ちなみに、.ssh のパーミッションがまずい場合のデバッグログのサンプルを読み解くとこんな感じ。 pic.twitter.com/6XlJ8hknV5
2020-05-01 00:05:25別途教えていただきました。他ソフトでの情報の見方についてもあります。
プロトコルとして SSH_MSG_DEBUG というデバッグメッセージが定義されていて、これを使って通知してきます。OpenSSH以外のクライアントでも、このメッセージが扱えれば表示できます。 twitter.com/angel_p_57/sta…
2020-05-01 00:39:51例えばTera TermならばTERATERM.INIでLogLevel 100と設定してあるとTTSSH.LOGに"2020-04-30 15:32:45.605Z [6592] DEBUG message from server: Ignored authorized keys: bad ownership or modes for file /home/sue/.ssh/authorized_keys"のように記録されます。
2020-05-01 00:41:26PuTTYの場合は、タイトルバー右クリック⇒Event Logで表示出来ます。 pic.twitter.com/tZilAczzBN
2020-05-01 00:43:05