Tous les utilisateurs doivent uniquement se connecter avec des clés, sauf John. Il peut se connecter avec des clés. S'il utilise le réseau local 192.168.1.x
, il peut utiliser ssh avec un mot de passe, mais il ne peut pas se connecter avec un mot de passe provenant d'adresses IP aléatoires.
Je ne sais pas comment écrire la règle pour John. Est-ce que je fais AllowUsers [email protected]
? Mais comment nier John d'ips différents? Que se passe-t-il si John est connecté via un autre port?
Quelle est la meilleure façon de le faire?
Vous devriez pouvoir le faire avec une directive Match
.
Avant de commencer, , assurez-vous de disposer d'au moins un compte disposant d'un accès fonctionnel au serveur (ou d'un accès physique).
Editez ensuite le fichier /etc/ssh/sshd_config
du serveur, en ajoutant votre bloc de correspondance à la fin, par exemple.
Match User john Address 192.168.1.0/24
PasswordAuthentication yes
Notez que cela exprime deux conditions, User john
et Address 192.168.1.0/24
, les deux doivent être remplies pour que PasswordAuthentication yes
être appliqué. Le 0/24
est notation CIDR pour toute adresse du sous-réseau 192.168.1.x.
Vous pouvez maintenant désactiver l’authentification par mot de passe pour d’autres combinaisons d’adresses utilisateur dans le corps principal de la configuration, en commençant par la section suivante:
# Change to no to disable tunnelled clear text passwords
et changer la valeur par défaut
#PasswordAuthentication yes
à
PasswordAuthentication no
Enfin, redémarrez le service - pour les systèmes init basés sur systemd
, vous pouvez le faire en utilisant
Sudo systemctl restart ssh.service
Vous pouvez vérifier que les utilisateurs ne correspondant pas ne peuvent plus s'authentifier à l'aide de mots de passe en forçant le client à essayer, par exemple.
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
qui devrait échouer avec un message comme
Permission denied (publickey).
alors que john
devrait être invité à entrer un mot de passe:
$ 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)
Si vous voulez que l'authentification par mot de passe soit le mécanisme préféré pour john
sur le réseau local, vous devrez peut-être spécifier cela dans la configuration du client correspondant, par exemple ~/.ssh/ssh_config