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条件を入れるのがお手軽。
/etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
/home/usr00/.ssh/authoried_keys
ecdsa-sha2-nistp256 AAAAE2U...
/home/usr01/.ssh/authoried_keys
from="192.168.33.101" ecdsa-sha2-nistp256 AAAAE2V...
AllowUsers
を使うパターン
「パスワード認証は許可したいんだよね」という場合はAllowUsers
を使う。
/etc/ssh/sshd_config
AllowUsers usr00
AllowUsers usr01@192.168.33.101
注意しなければならないのは有効なAllowUsers
を1つでも記載するといずれかのエントリでマッチしない場合に拒否されてしまう(=デフォルト拒否になる)ので、SSH接続を許可するユーザはすべて記載する必要があること。
とはいえ、設定ファイルを見ればどのユーザがSSH接続できるかわかるので安全。
DenyUsers
を使うパターン
「パスワード認証は許可したいし、新規ユーザ追加時にAllowUsers
は更新したくないよ」というワガママな人へ。
/etc/ssh/sshd_config
DenyUsers usr01
Match Address 192.168.33.101
DenyUsers !usr01
192.168.33.101から接続したときのみDenyUsers
を上書きしてusr01の拒否を無かったことにする。
DenyUsers
にマッチしない場合は後続の評価に回されるので、パターンに記載しなければ他のユーザには影響は出ない。