Comment supprimer la phrase secrète de la clé SSH sans avoir à créer une nouvelle clé?

1035

J'ai défini une phrase secrète lors de la création d'une nouvelle clé SSH sur mon ordinateur portable. Mais, comme je me rends compte maintenant, cela est assez douloureux lorsque vous essayez de valider ( Git et SVN ) vers un emplacement distant via SSH plusieurs fois en une heure.

Une façon de penser est de supprimer mes clés SSH et d'en créer de nouvelles. Existe-t-il un moyen de supprimer la phrase secrète, tout en conservant les mêmes clés?

btbytes
la source
9
Je pense que la réponse stricte est en fait la réponse de Torsten Marek. L'astuce ssh-agent peut être ce que vous recherchez, mais c'est une réponse à une question différente.
tardate
1
La phrase secrète n'est pas seulement une clé pour déverrouiller une clé SSH privée, mais une partie du mécanisme de cryptage. Une partie est votre clé SSH, l'autre - la phrase secrète saisie manuellement. Ce n'est que si les deux parties sont correctes que la clé composite générée à partir d'elles à la volée sera valide. Ainsi, une autre phrase secrète correspond à une autre clé SSH (et aucune phrase secrète n'est un cas spécial d '"autre phrase secrète").
Paul
97
Fermer ces questions, c'est comme débattre si les effets secondaires dans les langages de programmation doivent être autorisés parce qu'ils sont «purs» ou non. Les puristes courent toujours de travers, tandis que les autres s'en foutent parce que c'est une fonctionnalité utile et facilite la vie. ssh est nécessaire, même s'il n'est pas strictement lié à la programmation ... ne fermez pas ces questions. : |
2014

Réponses:

1933

Réponse courte:

$ ssh-keygen -p

Cela vous invitera ensuite à saisir l'emplacement du fichier de clés, l'ancienne phrase secrète et la nouvelle phrase secrète (qui peuvent être laissées vides pour n'avoir aucune phrase secrète).


Si vous souhaitez tout faire sur une seule ligne sans invites, faites:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Important: sachez que lors de l'exécution de commandes, elles seront généralement enregistrées dans votre ~/.bash_historyfichier (ou similaire) en texte brut, y compris tous les arguments fournis (c'est-à-dire les phrases secrètes dans ce cas). Il est donc recommandé d'utiliser la première option, sauf si vous avez une raison spécifique de faire autrement.

Notez cependant que vous pouvez toujours utiliser -f keyfilesans avoir à spécifier -Pni -N, et que le fichier clé est par défaut ~/.ssh/id_rsa, donc dans de nombreux cas, il n'est même pas nécessaire.

Vous voudrez peut-être envisager d'utiliser ssh-agent, qui peut mettre en cache la phrase secrète pendant un certain temps. Les dernières versions de gpg-agent prennent également en charge le protocole utilisé par ssh-agent.

Torsten Marek
la source
464
Pour être explicite: vous pouvez simplement exécuter ssh-keygen -pdans un terminal. Il vous demandera alors un fichier clé (par défaut le fichier correct pour moi, ~/.ssh/id_rsa), l'ancienne phrase secrète (entrez ce que vous avez maintenant) et la nouvelle phrase secrète (n'entrez rien).
Henrik N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1 pour obliger l'utilisateur à taper son mot de passe dans le terminal et le rendre accessible via ~/.bash_history. Il vaut mieux taper:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres
5
Vous devez noter que si vous entrez la commande dans le shell, un espace (blanc) a commencé, cette commande n'est pas enregistrée sur l' ~/.bash_hstoryIe. utilisez `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` et tout va bien (sauf si vous avez un autre enregistreur de frappe là-bas). Vous pouvez également vous débarrasser du record de l'histoire ..
Énorme
14
Il peut être utile d'ajouter une ligne indiquant que cela écrasera le fichier existant et ne demandera pas de nouvel emplacement.
Lars Francke
46

$ ssh-keygen -p travaillé pour moi

Ouvert git bash. Collé:$ ssh-keygen -p

Appuyez sur Entrée pour l'emplacement par défaut.

Entrez l'ancien mot de passe

Entrez une nouvelle phrase secrète - BLANK

Confirmer la nouvelle phrase secrète - BLANK

BOOM, la douleur de saisir la phrase secrète pour Git Push avait disparu.

Merci!

Karan
la source
Si lorsque vous appuyez sur Entrée pour $ ssh-keygen -pet que votre clé n'est pas à l'emplacement par défaut (/Users/yourname/.ssh/id_rsa), vous pouvez répondre en mettant /Users/yourname/.ssh/yourkeylorsque vous y
êtes
37

Vous voudrez peut-être ajouter ce qui suit à votre .bash_profile (ou équivalent), qui démarre ssh-agent à la connexion.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

Sur certaines distributions Linux (Ubuntu, Debian), vous pouvez utiliser:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Cela copiera l'ID généré sur une machine distante et l'ajoutera au trousseau distant.

Vous pouvez en lire plus ici et ici .

mlambie
la source
7
La distribution moderne ne démarre-t-elle pas un agent ssh prêt à l'emploi?
Troels Arvin
Sur certaines distributions Linux (Ubuntu, Debian), vous pouvez utiliser: ssh-copy-id -i ~ / .ssh / id_dsa.pub username @ host En supposant bien sûr que vous y ayez accès. Et bien que cela date de 2008, il devrait peut-être être modifié pour faire référence à id_rsa.pub (oui, je pourrais le modifier mais je ne me sens pas à l'aise de le faire pour les travaux des autres - et cela vaut surtout pour quelque chose comme ça).
Pryftan
@TroelsArvin Oui. Mais otoh il y a des moments où il est tué (bien que les circonstances que j'ai rencontrées ne me viennent pas à l'esprit - à moins que peut-être X11 ait un problème et que vous deviez le redémarrer ... cela pourrait être un tel exemple). Dans ce cas, vous devez le «recréer».
Pryftan
8

Pour modifier ou supprimer la phrase secrète, je trouve souvent plus simple de ne saisir que les drapeaux pet f, puis de laisser le système me demander de fournir les phrases secrètes:

ssh-keygen -p -f <name-of-private-key>

Par exemple:

ssh-keygen -p -f id_rsa

Saisissez un mot de passe vide si vous souhaitez supprimer la phrase secrète.

Un exemple d'exécution pour supprimer ou modifier un mot de passe ressemble à ceci:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Lors de l'ajout d'une phrase secrète à une clé qui n'a pas de phrase secrète, l'exécution ressemble à ceci:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
la source
3

Sous Windows, vous pouvez utiliser PuttyGen pour charger le fichier de clé privée, supprimer la phrase secrète, puis remplacer le fichier de clé privée existant.

Ajit Goel
la source
2

Sur le Mac, vous pouvez stocker la phrase secrète de votre clé ssh privée dans votre trousseau, ce qui rend son utilisation transparente. Si vous êtes connecté, il est disponible, lorsque vous êtes déconnecté, votre utilisateur root ne peut pas l'utiliser. La suppression de la phrase secrète est une mauvaise idée car toute personne disposant du fichier peut l'utiliser.

ssh-keygen -K

Ajoutez ceci à ~/.ssh/config

UseKeychain yes
bbaassssiiee
la source