Faire expirer ou expirer ma clé SSH protégée par mot de passe après un certain temps

12

J'ai une clé SSH privée que j'utilise pour l'authentification qui est stockée dans ~ / .ssh / id_rsa . Lorsque je ssh sur un serveur, on me demande le mot de passe pour déverrouiller la clé:

entrez la description de l'image ici

J'aime ça. J'aime aussi que je puisse ssh encore et encore et cela ne me demande pas mon mot de passe.

Ce que je n'aime pas, c'est que je ne suis pas obligé de saisir mon mot de passe clé des jours, voire des semaines plus tard. Je peux verrouiller mon écran ou le mettre en veille et je n'ai toujours pas besoin de saisir mon mot de passe. Le seul moment où il semble expirer, c'est quand je me déconnecte (ce que je fais rarement).

Comment puis-je faire expirer le mot de passe de la clé après un certain temps, me forçant à saisir à nouveau mon mot de passe pour m'authentifier? Faire en sorte que peut-être après 1 heure, la clé soit automatiquement oubliée.

Michael Kropat
la source

Réponses:

4

Plutôt que de modifier ssh-agent (qui nécessite maintenant des quantités stupides de piratage), je recommande fortement de simplement changer les paramètres de votre trousseau (de connexion) par défaut. J'utilise le «verrouillage du sommeil» très utile ainsi que le «verrouillage après 4 heures» parce que je ne veux pas d'invites à moins que je ne sois réellement afk.

Ouvrez l'accès au trousseau et cliquez avec le bouton droit sur le trousseau de connexion pour modifier les paramètres: Paramètres de sécurité du trousseau

Ou si vous préférez une ligne de commande:

security set-keychain-settings -lu -t 14400

Cela entraînera au moins une invite supplémentaire pour déverrouiller le trousseau lui-même (nécessitant votre mot de passe de connexion) ainsi que l'invite pour la clé que vous essayez d'utiliser ... mais cela bat la désactivation de la protection de l'intégrité du système IMO.

Dave Gregory
la source
Ce n'est pas une option dans El Capitan pour moi, et la commande en ligne de commande ne semble pas faire de différence, savez-vous s'il existe une option similaire dans El Capitan quelque part?
Ian
1
Je suis presque sûr d'avoir pu le faire sur El Cap - je viens de vérifier et les deux méthodes (UI et cmdline) fonctionnent toujours sur Sierra. Cependant, je ne peux le faire que sur le trousseau de connexion, pas sur System ni sur iCloud.
Dave Gregory
9

Remarque : dans les versions plus récentes d'OS X, vous devez désactiver la protection de l'intégrité du système pour que cette réponse fonctionne. (Merci à @Dave Gregory et @Jaap de l'avoir signalé.)

Ouvrez /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(dans les anciennes versions:) org.openbsd.ssh-agent.plistdans un éditeur de texte. Remplacer:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

avec:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

Cela expirera la clé après 30 minutes.

Redémarrez. Attendez, redémarrez?!? Ce n'est pas Windows! Oui, redémarrez.

Eh bien, vous pouvez essayer de déchiffrer les instructions pour changer le paramètre à la volée , mais bonne chance.

Michael Kropat
la source
1
Un pédant comme moi remplacerait le "1800" par "30m" car cela le rend un peu plus facile à lire. Voir FORMATS DE TEMPS dans sshd_config (8) pour le format complet.
Tony Williams,
@Tony Williams cool! corrigé
Michael Kropat
Cela ne semble pas fonctionner pour moi sur Yosemite; quelqu'un d'autre?
Dave Gregory
J'ai trouvé une solution de contournement sur Yosemite qui n'implique pas de désactiver la protection de l'intégrité du système; ajouté comme réponse ci-dessous.
Dave Gregory
1
Merci pour l'info @Jaap. Je n'utilise pas OS-X au jour le jour actuellement, donc je ne peux rien vérifier personnellement, mais pour essayer d'être un bon intendant de ce Q&R, j'ai mis à jour ma réponse en fonction de vos informations et changé la réponse acceptée par Dave Gregory. car la désactivation de la protection de l'intégrité du système semble déconseillée dans de nombreux cas.
Michael Kropat
7

Vous devez définir la durée de vie de la clé. Par défaut, il est par défaut pour toujours.

Lorsque vous exécutez, ssh-addvous souhaitez utiliser l' -toption. Si vous voulez une durée de vie d'une heure, c'est le cas ssh-add -t 1h. Les formats d'heure peuvent être vus dans la sshd_configpage de manuel mais en termes simples, ils sont un nombre suivi de s, m, h, d ou w pendant secondes, minutes, heures, jours ou semaines.

ssh-addpeut être placé dans votre fichier .bashrc et il vous demandera simplement de valider la clé une fois. Même lorsque la clé "expire", elle n'est pas supprimée - elle demande simplement à nouveau la phrase secrète lors d'une tentative d'utilisation.

L'autre option serait de modifier les options de lancement pour ssh-agentlesquelles sont stockées dans /System/Library/LaunchAgents/org.openbsd.ssh-agent.plistet d'y ajouter -t. (J'utilise LaunchControlpour les changer, mais vous pouvez le faire à la main si vous faites attention.)

Tony Williams
la source
Je préfère ne pas avoir à me rappeler d'exécuter ssh-addmanuellement avant de courir à sshchaque fois. C'est intéressant, mais je cherche vraiment quelque chose d'automatique.
Michael Kropat
+1 merci de m'avoir org.openbsd.ssh-agent.plist
indiqué
1

Une autre solution est:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

Avec cette solution, vous n'avez pas à choisir un délai d'expiration pour tous vos trousseaux - assez ennuyeux lorsque vous souhaitez définir un délai de quelques secondes pour l'enregistrement de votre mot de passe de clé privée - et vous n'avez pas à désactiver votre SIP pour modifier / Système / Bibliothèque / LaunchAgents / org.openbsd.ssh-agent.plist.

symsymmas
la source