SSH接続におけるパスワード認証滅べばいいのに、と思った案件。
やりたいこと
以下の環境でusr01@svr00についてsvr01からのSSH接続のみを許可したい。
ただしusr00@svr00はどのサーバからもSSH接続できるものとする。
| server | address | user |
|---|---|---|
| svr00 | 192.168.33.100 | usr00,usr01 |
| svr01 | 192.168.33.101 | usr00 |
| svr02 | 192.168.33.102 | usr00 |
authorized_keysを使うパターン
公開鍵認証以外の認証を拒否している前提であればauthorized_keysでfrom条件を入れるのがお手軽。
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
ecdsa-sha2-nistp256 AAAAE2U...
from="192.168.33.101" ecdsa-sha2-nistp256 AAAAE2V...
AllowUsersを使うパターン
「パスワード認証は許可したいんだよね」という場合はAllowUsersを使う。
AllowUsers usr00
AllowUsers usr01@192.168.33.101
注意しなければならないのは有効なAllowUsersを1つでも記載するといずれかのエントリでマッチしない場合に拒否されてしまう(=デフォルト拒否になる)ので、SSH接続を許可するユーザはすべて記載する必要があること。
とはいえ、設定ファイルを見ればどのユーザがSSH接続できるかわかるので安全。
DenyUsersを使うパターン
「パスワード認証は許可したいし、新規ユーザ追加時にAllowUsersは更新したくないよ」というワガママな人へ。
DenyUsers usr01
Match Address 192.168.33.101
DenyUsers !usr01
192.168.33.101から接続したときのみDenyUsersを上書きしてusr01の拒否を無かったことにする。
DenyUsersにマッチしない場合は後続の評価に回されるので、パターンに記載しなければ他のユーザには影響は出ない。