Vous devriez pouvoir le faire avec une directive Match
.
Avant de commencer, assurez-vous d'avoir au moins un compte avec un accès basé sur une clé au serveur (ou un accès physique).
Ensuite, modifiez 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
Remarquez que cela exprime deux conditions, User john
et Address 192.168.1.0/24
, toutes les deux devant être satisfaites pour que PasswordAuthentication yes
soit appliqué. Le 0/24
est la notation CIDR pour n'importe quelle adresse dans le sous-réseau 192.168.1.x.
Maintenant, vous pouvez désactiver l'authentification par mot de passe pour d'autres combinaisons utilisateur-adresse dans le corps principal de la configuration, en trouvant la section commençant par :
# Changez en no pour désactiver les mots de passe en texte clair tunnelisés
et en changeant la valeur par défaut
#PasswordAuthentication yes
par
PasswordAuthentication no
Enfin, redémarrez le service - pour les systèmes d'initialisation basés sur systemd
, vous pouvez le faire en utilisant
sudo systemctl restart ssh.service
Vous pouvez vérifier que les utilisateurs qui ne correspondent pas ne peuvent plus s'authentifier en utilisant des mots de passe en forçant le client à essayer par exemple
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no steeldriver@192.168.1.11
ce qui devrait échouer avec un message comme
Permission denied (publickey).
tandis que john
devrait être invité à entrer un mot de passe :
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no john@192.168.1.11
john@192.168.1.11's password:
Bienvenue sur Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)
Si vous souhaitez que l'authentification par mot de passe soit le mécanisme préféré pour john
lorsqu'il est sur le réseau local, vous devrez peut-être le spécifier dans la configuration client correspondante, c'est-à-dire ~/.ssh/ssh_config