Question:
Est-il possible d'utiliser à la fois l'authentification par clé privée et par mot de passe pour la connexion SSH?
chrisdotcode
2012-07-31 22:46:35 UTC
view on stackexchange narkive permalink

Il semble qu'ils s'excluent mutuellement, car la désactivation de l'un me donne l'autre, et vice versa. L'authentification à deux facteurs pour mes serveurs ssh semble vraiment sympa, alors y a-t-il un moyen d'accomplir cela?

Are you are not wanting to count passphrased ssh keys?
Oh, c'est vrai. J'aurais dû le préciser. Non, ça ne compte pas. J'aimerais que le serveur soit authentifié deux fois, pas le client :-)
@ChrisBlake - pourquoi? Quel problème essayez-vous de résoudre? Peux-tu être plus précis? Quel est votre modèle de menace? Contre quel risque essayez-vous de vous défendre?
@D.W. Modèle de menace pour exiger cela: travailler avec des personnes en qui vous n'avez pas confiance pour prendre la sécurité aussi au sérieux que vous. Vous voulez empêcher quelqu'un de compromettre votre serveur si son ordinateur portable, avec une clé ssh non cryptée négligemment, est volé.
@JaneDoe, si tel est le problème, cela pourrait être mieux résolu par une politique plutôt qu'un mécanisme technique. Exiger un mot de passe à chaque connexion présente des inconvénients majeurs et cela me semble contre-productif. Je pense qu'il est préférable de définir simplement une politique organisationnelle exigeant que tous vos administrateurs système chiffrent leur clé privée avec une phrase de passe. (Si vous ne faites pas confiance à vos administrateurs système pour suivre cette politique, pourquoi les laissez-vous administrer vos systèmes?)
Cinq réponses:
mricon
2012-12-30 19:58:36 UTC
view on stackexchange narkive permalink

Avec les versions récentes de Fedora et RHEL 6, vous pouvez utiliser RequiredAuthentications2 pubkey, password pour exiger l'authentification par mot de passe pubkey et . Habituellement, cela nécessite une clé pub et un jeton d'authentification à 2 facteurs, pas le mot de passe de l'utilisateur.

Mise à jour: maintenant sur RHEL / CentOS 7, et tout système avec une version récente d'OpenSSH, vous pouvez utiliser:

  AuthenticationMethods "publickey, password" "publickey, keyboard-interactive"  

Il est également possible d'utiliser la directive Match pour exclure les adresses IP ou Utilisateurs.

Avec ces nouvelles versions, c'est la nouvelle (et la plus simple) bonne réponse.
Voir la réponse @Jakuje ici pour une configuration SSH plus récente de la clé de distribution Linux + mot de passe. Le nom du paramètre de configuration a changé.
Il aurait été plus judicieux de mentionner la version OpenSSH au lieu d'une vague plage de version de la distribution _major_.
dr jimbob
2012-07-31 23:30:42 UTC
view on stackexchange narkive permalink

Vous pouvez avoir à la fois une authentification par clé publique et par mot de passe sur le même serveur. Si l'authentification par clé publique échoue, elle passera à l'authentification par mot de passe.

Quant à exiger les deux, cela semble idiot et contre-productif, et en vérifiant man sshd_config , il n'y a pas d'option pour faites ceci.

Votre clé privée ssh doit avoir une phrase secrète sécurisée. Donc, si un attaquant obtient votre clé privée, il ne peut toujours rien faire sans obtenir au préalable votre phrase de passe. S'ils ont compromis cette phrase de passe (très probablement avec un keylogger; ou en forçant brutalement une phrase de passe extrêmement faible), ils peuvent aussi saisir / forcer brutalement tout mot de passe mémorisé.

Si vous le souhaitez vraiment, vous pouvez éventuellement configurez quelque chose avec ForceCommand (par exemple, autorisez uniquement l'authentification par clé publique, puis dirigez l'utilisateur vers un shell qui demande un mot de passe). Je ne recommande pas cela.

Une meilleure alternative si vous voulez limiter l'exposition, est d'avoir une configuration de pare-feu pour limiter les adresses IP qui peuvent atteindre le port ssh; éventuellement avec un VPN supplémentaire fonctionnant sur un serveur quelque part si vous avez besoin de tunnel depuis un autre ordinateur à un moment donné. Vous pouvez également utiliser quelque chose comme knockd pour ouvrir un trou dans un pare-feu après un modèle de frappe de port particulier, tout en reconnaissant que toute personne écoutant le trafic pourrait rejouer le modèle de frappe pour ouvrir un port.

Droite. J'aurais dû prendre l'indice du commentaire d'@Phillip's, puisque la clé privée a déjà besoin d'un mot de passe, c'est déjà une forme d'authentification à deux facteurs. Et oui, je vais également mettre en place un démon de frappe de port, mais je ne pouvais pas choisir parmi les implémentations données sur le site Web. Merci pour la référence et la réponse.
Prenons le cas où l'attaquant a pris le contrôle d'une machine dans laquelle l'utilisateur a utilisé un agent d'authentification (par exemple, `ssh-agent`) pour mettre en cache la clé privée.L'attaquant n'a pas la phrase de passe, mais peut toujours utiliser la clé privée jusqu'à ce que l'agent vide son cache.C'est dans ce scénario que le fait d'exiger la clé * et * le mot de passe de connexion peut aider.
* "Donc, si un attaquant obtient votre clé privée, il ne peut toujours rien faire sans obtenir au préalable votre phrase de passe. S'il a compromis cette phrase de passe (très probablement avec un keylogger; ou en forçant brutalement une phrase de passe extrêmement faible), il le peut de manière trivialeaussi saisir / forcer brutalement tout mot de passe mémorisé. "* Vrai, mais il y a une raison supplémentaire d'utiliser un mot de passe côté serveur: empêcher le craquage hors ligne.Par exemple.à partir d'un appareil mobile, 4 chiffres peuvent être une mesure d'authentification supplémentaire sécurisée s'il est verrouillé indéfiniment après 3 tentatives, mais avec une phrase de passe sur la clé privée, vous ne pouvez pas verrouiller.
Jakuje
2015-09-22 21:27:52 UTC
view on stackexchange narkive permalink

(affichage croisé de réponse SO avec une solution mise à jour pour ces jours)

Si vous lisez la page de manuel de sshd_config (5) , là est l'option AuthenticationMethods , qui prend la liste des méthodes que vous devez passer avant de vous accorder l'accès. Votre configuration requise est:

  AuthenticationMethods publickey, mot de passe  

Cette méthode devrait fonctionner sur tous les systèmes Linux actuels avec des openshs récents (openssh-6, openssh-7 ).

Systèmes plus anciens

La seule exception que je connaisse est RHEL 6 (openssh-5.3), qui nécessite de définir une option différente avec les mêmes valeurs (comme décrit dans l'autre réponse):

  RequiredAuthentications2 publickey, mot de passe  
dans "AuthenticationMethods", au lieu de "pubkey" devrait être "publickey".Vérifier: `man sshd_config`
Phillip Nordwall
2012-08-01 00:18:57 UTC
view on stackexchange narkive permalink

J'ai examiné cela un peu plus et j'ai trouvé ce qui suit.

Vous pouvez utiliser PAM pour l'authentification à deux facteurs, mais ce faisant, vous n'utiliserez pas de clés SSH, vous utiliserez un deux facteurs différents.

Par exemple, vous pouvez utiliser google avec leur authentification à deux facteurs et utiliser pam pour vous authentifier, comme décrit à

http: //www.techrepublic. com / blog / opensource / authentification-ssh-à deux-facteurs-via-google-secures-linux-logins / 2607

pouvons-nous utiliser SSHkeys ET 2FA?
L'utilisation d'une clé avec phrase secrète vous donne deux facteurs car c'est quelque chose que vous avez et quelque chose que vous connaissez.
Luca Scotto Lavina
2018-06-05 13:55:51 UTC
view on stackexchange narkive permalink

La seule solution qui a fonctionné pour moi est d'avoir ce qui suit dans le fichier / etc / ssh / sshd_config (testé avec un CentOS7):

  PubkeyAuthentication oui AuthenticationMethods publickey passwordAuthorizedKeysFile .ssh / allowed_keysPasswordAuthentication oui PermitEmptyPasswords noChallengeResponseAuthentication noUsePAM yes  

Ce qui signifie avoir PAM activé, avoir activé chaque ligne qui concerne la clé publik et, enfin, que AuthenticationMethods répertorie correctement les deux méthodes. a été écrit par Jakuje, vous ne devez pas ajouter de virgule entre publickey et password après AuthenticationMethods.

Vous devez ajouter une virgule entre les méthodes d'authentification si vous souhaitez que ces méthodes soient combinées, c'est-à-dire ** publickey ** AND ** password ** (comme dans la question).Dans votre exemple, le comportement est différent, - soit ** publickey ** OU ** mot de passe ** sera accepté.
Je ne peux pas croire que cela a fonctionné pour moi.la suppression de la virgule entre «publickey» et «password» permet de s'authentifier par ceci ou cela.merci pour cette solution


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...