Entrez une fois le mot de passe SSH


124

Avant la mise à niveau

Lorsque j’exécutais git clone git@...(avec ssh) une fois par ordinateur, une fenêtre de dialogue apparaît, contenant une zone de texte pour l’insertion de ma phrase secrète SSH, et confirmée par OK. Ensuite, la phrase secrète n'était plus nécessaire jusqu'au prochain démarrage de mon système.

Après la mise à niveau vers 13.10

Après la mise à niveau vers Ubuntu 13.10, cette fenêtre n'apparaît plus, mais un message apparaît dans le terminal:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

... chaque fois que vous clonez un référentiel git, cela apparaît.

Comment puis-je réparer cela? Je souhaite entrer ma phrase secrète une seule fois.


1
Je pense que vous devez utiliser la ssh-addcommande pour cela. L'as tu essayé?
devius

2
J'ai essayé ssh-agent bash+ ssh-add. Cela ne fonctionne que pendant quelques minutes.
Ionică Bizău

J'ai le même problème après tout. Je pense que cela pourrait être un conflit entre l'agent ssh d'OpenSSH et le démon Gnome Keyring.
devius


2
Ajouter AddKeysToAgent yesà .ssh / config fonctionne pour moi.
xslittlegrass

Réponses:


138

Mise à jour: semble être un bug de 13.10:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169


Quoi qu'il en soit en exécutant les commandes suivantes, le problème a été résolu pour moi:

Comment réparer

J'ai résolu ce problème en entrant les commandes suivantes:

$ ssh-agent bash

Cela crée un nouveau processus bash qui vous permet d'ajouter des clés privées. Lors de l'ajout d'une nouvelle clé privée, vous serez invité à entrer la phrase secrète une fois et une seule fois.

Puis:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

... où usernameest votre nom d'utilisateur Vous pouvez faire la même chose avec $USERvariable:

$ ssh-add /home/$USER/.ssh/id_rsa

Sinon, utilisez simplement ~pour votre répertoire personnel.

$ ssh-add ~/.ssh/id_rsa

Et le problème a été résolu.


48
Cela ne résout pas le problème du tout. Il ajoute uniquement l'identité à l'agent jusqu'à ce que vous sortiez du terminal. Si vous ouvrez un nouveau terminal, vous devez à ssh-addnouveau.
devius

@devius Oui, semble être un bug. Mais, les commandes ci-dessus ont résolu mon problème ...
Ionică Bizău

3
Donc, pour clarifier: avec ce "correctif" vous n'aurez plus qu'à taper à nouveau la phrase secrète dans ce terminal. Dès que vous ouvrez un nouveau terminal, vous devrez redonner la phrase secrète.
harijay

9
J'ai essayé $ ssh-add /home/username/.ssh/id_rsa(sans ssh-agent bash) et cela a fonctionné pour moi même après la réouverture du terminal. Mais la solution complète pour moi était celle-ci stackoverflow.com/a/4246809/532252 . Tout va bien même après le redémarrage de la machine.
Kishie

1
Je viens de taper ssh-add dans le terminal. Pas besoin de passer à ssh-agent bash ou de spécifier un fichier
id_rsa

39

0) réponse courte

Ajoutez dans votre .ssh/configligne au début:

AddKeysToAgent yes

et lancez git / ssh / ... Si cela ne suffit pas, vérifiez votre version de ssh et vérifiez que ssh-agent est chargé avec ces instructions:

1) Vérifiez la version openssh

Premièrement, vérifiez que votre version ssh, elle doit être supérieure égale à 7.2 :

ssh -V

2) Editez le fichier de configuration

Si c'est le cas, ajoutez simplement votre .ssh/configligne au début:

AddKeysToAgent yes

3) Vérifiez si ssh-agent est déjà ouvert

Habituellement, les distributions chargent automatiquement un agent ssh. Pour le vérifier, lancez

ps aux | grep -v grep | grep ssh-agent

Si vous ne voyez aucune ligne le contenant, vous devez le charger en lançant:

eval $(ssh-agent)

Notez que cela active l'agent uniquement sur le terminal actuel. Pour l'activer partout, vous pouvez essayer d'ajouter cette ligne à votre ~/.profilefichier et de redémarrer.


11
AddKeysToAgent yesest la réponse canonique post-2016 - et correspond exactement à ce que la plupart des utilisateurs modernes recherchent. C'est mi-2017. Ubuntu> = 16.04 ( Xenial Xerus ) est maintenant une hypothèse raisonnable. La plupart des installations OpenSSH dans la nature supportent maintenant cette option. Les scripts shell ad-hoc du type préconisé par toutes les autres réponses à cette question sont tellement ... dépassés . </sigh>
Cecil Curry

2
Cela devrait être la réponse acceptée
simernes

32

Ce document Atlassian corrige le problème pour moi sur Ubuntu 14.04 Server Edition:

Ajoutez simplement ces valeurs dans votre .bashrcfichier:

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

Et après s'être connecté, il demande un mot de passe une seule fois et se met en cache. Vous n'avez pas besoin de le saisir à chaque fois.


2
Cela semble fonctionner sur d'autres distributions, comme je viens d'utiliser avec succès cette réponse sur Sabayon Linux.
BH2017

1
Merci! Cette solution a fonctionné pour moi sur un système Ubuntu où le démon gnome-keyring-daemon ne fonctionnait pas en raison de problèmes liés au démon dbus. En particulier, je recevais ces erreurs "** Message: impossible de se connecter au bus de session dbus: impossible de lancer automatiquement un démon dbus sans un $ DISPLAY pour X11" et après avoir défini la variable d'environnement d'affichage, j'ai "** Message: Couldn ne vous connectez pas au bus de session dbus: // bin / dbus-launch s'est terminé anormalement avec l'erreur suivante: erreur de lancement automatique: l'initialisation de X11 a échoué. "
user207863

1
Cela nécessite plus de votes positifs, corrige le problème sur Ubuntu 16.04 virtualisé.
Niels Keurentjes le

3
Cela corrige le problème pour moi aussi sur Bash pour Windows. J'ai essayé de lancer Bash plusieurs fois et cela rappelait le mot de passe. Je n'ai pas encore essayé de redémarrer.
Amr

2
Après avoir essayé toutes les autres solutions, cela a fonctionné pour moi. Cela devrait être la solution pour l'OP
João Pimentel Ferreira

20

Une solution de contournement pour ce bogue consiste à ajouter ce qui suit au bas de~/.bashrc

eval `gnome-keyring-daemon --start`

2
Le trousseau de clés Gnome ne devrait-il pas faire partie de votre session?
Pavel Šimerda

1
Si vous parlez de "devrait", alors Cette question ne devrait pas être ici à la première place, si tout est si parfait
Anwar

1
Je ne sais pas si cela appartient à .bashrc. On dirait que vous devez l'ajouter à un fichier de profil DE
Dmitry Ginzburg

3

Les utilisateurs de la coquille de poisson peuvent utiliser ce script pour faire la même chose.

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end

0

J'utilise ceci:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO

0

Si vous utilisez un fichier azure .ppk

Convertissez-le simplement en pem et ajoutez l'autorisation 400 en quelques étapes simples:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>

0

Sur Ubuntu 18.04, ssh-agent est démarré à l'ouverture de la session X, il est géré dans le fichier /etc/X11/Xsession.options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.