web-dev-qa-db-fra.com

L'authentification par clé SSH demande le mot de passe lors de la première connexion

J'ai un nouveau système Ubuntu 16.04.1 LTS et j'ai remarqué que l'authentification SSH basée sur une clé demande le mot de passe du compte la première fois que je me connecte à la machine et que les tentatives SSH suivantes fonctionnent sans demander de mot de passe.

Jusqu'à présent, le comportement peut être reproduit en redémarrant la machine. Il peut y avoir un délai d'attente également, mais je suis en train de configurer la machine et je ne l'ai pas encore rencontrée.

En général, c’est plutôt bien car cela atténue la compromission d’une clé SSH, bien que cela présente un inconvénient pour les processus automatisés; dans mon cas, la gestion de la configuration avec Ansible.

Où le comportement du serveur SSH est-il configuré? Spécifiquement, pour demander une authentification par mot de passe même si une authentification basée sur une clé réussit, mais seulement la première fois que la clé est utilisée pour ouvrir une session.

Je souhaite conserver ce comportement ish "à deux facteurs" pour les sessions interactives, mais le désactiver (par exemple, ne pas demander de mot de passe) pour certains comptes (par exemple, un utilisateur ansible dédié).

Merci!

2
berto

J'ai trouvé la réponse sur un autre échange de pile. La raison de ce comportement est que le répertoire de base est crypté!

https://unix.stackexchange.com/a/48910/122815

Votre répertoire personnel est-il crypté? Si tel est le cas, vous devrez fournir un mot de passe pour votre première session SSH. La deuxième session ssh sur le même serveur fonctionne avec la clé auth. Si tel est le cas, vous pouvez déplacer vos allowed_keys dans un répertoire non chiffré et modifier le chemin dans ~/.ssh/config.

J'ai suivi cela en regardant à travers /var/log/auth.log, et plus précisément, la ligne:

pam_ecryptfs: Passphrase file wrapped

La recherche de cela m'a conduit à l'autre réponse d'échange de pile.

2
berto

Si vous supprimez le mot de passe de la clé privée, l'agent SSH n'en demandera pas. En supposant que le compte d'ordinateur uniquement s'appelle ansible comme dans la question, vous pouvez y parvenir avec cette commande:

Sudo -u ansible ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''

ou

Sudo ssh-keygen -f ~ansible/.ssh/id_<TYPE> -N ''

en fonction de votre configuration de gestion des droits d'accès (remplacez <TYPE> par le type de clé en question, par exemple, rsa, ecdsa, ed25519, etc.).


Les clés de machine sans mot de passe sont courantes et suffisamment sûres aussi longtemps que possible.

  • utilise une clé dédiée unique pour le service à l'aide de la clé (différente de la clé utilisée par le ou les développeurs du service!) et

  • remplace la clé et la supprime de tous les fichiers authorized_keys dès le premier signe d'un éventuel compromis (ce qui est facilité par la mesure décrite au point précédent).

Bien entendu, le fichier de clé doit avoir le mode d'accès 0500 pour limiter l'accès au compte d'ordinateur uniquement. C'est le mode d'accès par défaut pour les clés créées avec ssh-keygen.

0
David Foerster