下記のエントリの続編です。
実装した内容を社のセキュリティ対策チームにレビュー依頼したところ、 @mrtc0と@hibomaからSSH接続時にProxyCommandを利用した場合に、踏み台サーバのForceCommandがスキップされる問題があるとの報告を受けたので、こればかりはどうしようもないのでPAMモジュールを書くことにした。
当初はCGOで書こうとしたのだけど、CGOだとgoroutine起動時の挙動が怪しくて、そのあたりを調べたりするコストが嵩んだので、GoogleAuthenticatorの実装を参考にしながら結局Cで書いた。
使い方はREADMEの通りで、バイナリを諸々おいたあとに、SSHDのconfigに下記を書いたらいい。
KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
意味合い的にはpublickey認証のあとに、keyboard-interactive認証でPAMを呼び出し、その中で、google-web-oauthコマンドを呼ぶPAMが使われる感じ。
これでProxyCommandを利用するときにもちゃんと認証されるようになるかな。
ここまで書いたから、暇なときにログインしたらSlackに通知したりできるようにするか、それはpam_execに任せるか悩ましいところ。