web-dev-qa-db-ja.com

ユーザーがローカルネットワークを使用している場合にのみパスワードを使用するようにユーザーのsshを許可するにはどうすればよいですか?

すべてのユーザーは、John以外のキーのみを使用してログインする必要があります。キーを使用してログインでき、ローカルネットワーク192.168.1.xを使用している場合、パスワードを使用してsshできますが、ランダムIPのパスワードを使用してログインすることはできません。

Johnのルールの書き方がわかりません。 AllowUsers [email protected]を実行しますか?しかし、ジョンを異なるIPから拒否する方法は?ジョンが別のポートを使用して接続するとどうなりますか?

それを行う最良の方法は何ですか?

1
Lynob

Matchディレクティブでこれを行うことができるはずです。

開始する前に、サーバー(または物理アクセス)への作業キーベースのアクセスを持つアカウントが少なくとも1つあることを確認してください。

次に、サーバーの/etc/ssh/sshd_configファイルを編集して、最後にマッチブロックを追加します。

Match User john Address 192.168.1.0/24
    PasswordAuthentication yes

これは、User johnAddress 192.168.1.0/24の2つの条件を表すことに注意してください。 both は、PasswordAuthentication yesを適用するために満たす必要があります。 0/24は、192.168.1.xサブネット内の任意のアドレスの CIDR表記 です。

これで、構成の本体で他のユーザーとアドレスの組み合わせのパスワード認証を無効にして、次のセクションを見つけることができます。

# Change to no to disable tunnelled clear text passwords

およびデフォルトの変更

#PasswordAuthentication yes

PasswordAuthentication no

最後に、サービスを再起動します-systemdベースのinitシステムでは、次を使用してそれを行うことができます

Sudo systemctl restart ssh.service

一致しないユーザーがパスワードを使用して認証できなくなったことをテストするには、クライアントに強制的に試行させます。

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]

次のようなメッセージで失敗するはずです

Permission denied (publickey).

一方、johnはパスワードの入力を求められます。

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
[email protected]'s password: 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)

パスワード認証をローカルネットワーク上でjohnpreferredメカニズムにしたい場合は、対応するクライアント構成で指定する必要があります。つまり、~/.ssh/ssh_config

2
steeldriver