Geben Sie die SSH-Passphrase einmal ein

124

Vor dem Upgrade

Wenn ich git clone git@...einmal pro Computer einen Neustart ausgeführt habe (mit ssh), wurde ein Fenster mit einem Textfeld zum Einfügen meiner SSH-Passphrase angezeigt und mit OK bestätigt. Dann war die Passphrase bis zum nächsten Start meines Systems nicht mehr erforderlich.

Nach dem Upgrade auf 13.10

Nach dem Upgrade auf Ubuntu 13.10 erscheint dieses Fenster nicht mehr, sondern eine Meldung im Terminal:

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

... jedes Mal, wenn Sie ein Git-Repository klonen, wird dies angezeigt.

Wie kann ich das beheben? Ich möchte meine Passphrase nur einmal eingeben.

Ionică Bizău
quelle
1
Ich denke, Sie müssen den ssh-addBefehl dafür verwenden. Hast du es versucht?
Devius
2
Ich habe versucht ssh-agent bash+ ssh-add. Das funktioniert nur für wenige Minuten.
Ionică Bizau
Ich habe immerhin das gleiche Problem. Ich denke, es könnte ein Konflikt zwischen OpenSSHs ssh-agent und dem Gnome Keyring Daemon sein.
Devius
2
Add AddKeysToAgent yesto .ssh / config funktioniert bei mir.
Xslittlegrass

Antworten:

138

Update: scheint ein Bug von 13.10 zu sein:

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


Auf jeden Fall wurde das Problem mit den folgenden Befehlen behoben:

Wie repariert man

Ich habe dies durch Eingabe der folgenden Befehle behoben:

$ ssh-agent bash

Dadurch wird ein neuer Bash-Prozess erstellt, mit dem Sie private Schlüssel hinzufügen können. Wenn Sie einen neuen privaten Schlüssel hinzufügen, werden Sie nur einmal zur Eingabe der Passphrase aufgefordert.

Und dann:

$ 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)

... wo usernameist dein Benutzername. Sie können dasselbe mit $USERVariable tun :

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

Alternativ verwenden Sie einfach ~für Ihr Home-Verzeichnis.

$ ssh-add ~/.ssh/id_rsa

Und das Problem wurde behoben.

Ionică Bizău
quelle
48
Dies löst das Problem überhaupt nicht. Die Identität wird nur dem Agenten hinzugefügt, bis Sie das Terminal verlassen. Wenn Sie ein neues Terminal öffnen, müssen Sie es ssh-adderneut tun.
Devius
@ devius Ja, scheint ein Bug zu sein. Aber die obigen Befehle haben mein Problem behoben ...
Ionică Bizău
3
Zur Verdeutlichung: Mit diesem "Fix" müssen Sie nur die Passphrase in diesem Terminal nicht erneut eingeben. Sobald Sie ein neues Terminal öffnen, müssen Sie die Passphrase erneut eingeben.
Harijay
9
Ich habe es $ ssh-add /home/username/.ssh/id_rsa(ohne ssh-agent bash) versucht und es hat auch nach dem erneuten Öffnen des Terminals funktioniert. Aber die Komplettlösung für mich war diese stackoverflow.com/a/4246809/532252 . Auch nach dem Neustart der Maschine ist alles in Ordnung.
Kishie
1
Ich habe gerade ssh-add im Terminal eingegeben. Es ist nicht erforderlich, zu ssh-agent bash zu wechseln oder eine id_rsa-Datei anzugeben
henry74 10.04.14
39

0) Kurze Antwort

Fügen Sie .ssh/configam Anfang eine Zeile hinzu:

AddKeysToAgent yes

und starte git / ssh / ... Wenn es nicht ausreicht, überprüfe deine ssh-Version und stelle sicher, dass der ssh-agent mit folgenden Anweisungen geladen ist:

1) Überprüfen Sie die openssh-Version

Überprüfen Sie zunächst, ob Ihre ssh-Version größer als 7.2 sein muss :

ssh -V

2) Bearbeiten Sie die Konfigurationsdatei

Wenn dies der Fall ist, fügen Sie .ssh/configam Anfang einfach eine Zeile hinzu:

AddKeysToAgent yes

3) Überprüfen Sie, ob ssh-agent bereits geöffnet ist

Normalerweise laden Distributionen automatisch einen ssh-Agenten. Um es zu überprüfen, führen Sie aus

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

Wenn Sie keine Zeile sehen, die sie enthält, müssen Sie sie laden, indem Sie Folgendes ausführen:

eval $(ssh-agent)

Beachten Sie, dass dadurch der Agent nur auf dem aktuellen Terminal aktiviert wird. Wenn Sie ihn also überall aktivieren möchten, können Sie versuchen, diese Zeile in Ihre ~/.profileDatei einzufügen und einen Neustart durchzuführen.

tobiasBora
quelle
11
AddKeysToAgent yesist die kanonische Antwort für die Zeit nach 2016 - und genau das , worüber die meisten modernen Benutzer stehen. Es ist Mitte 2017. Ubuntu> = 16.04 ( Xenial Xerus ) ist jetzt eine vernünftige Annahme. Die meisten OpenSSH-Installationen in freier Wildbahn unterstützen diese Option. Ad-hoc-Shell-Script-Kludges, wie sie von jeder anderen Antwort auf diese Frage befürwortet werden, sind so ... passé . </sigh>
Cecil Curry
2
Dies sollte die akzeptierte Antwort sein
simernes
32

Dieses Atlassian-Dokument behebt das Problem für mich unter Ubuntu 14.04 Server Edition:

Fügen Sie einfach diese Werte in Ihre .bashrcDatei ein:

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

Nach dem Einloggen werden Sie nur einmal nach dem Passwort gefragt und es wird zwischengespeichert. Sie müssen es nicht jedes Mal eingeben.

Arda
quelle
2
Dies scheint auf anderen Distributionen zu funktionieren, so wie ich diese Antwort gerade erfolgreich auf Sabayon Linux verwendet habe.
BH2017,
1
Vielen Dank! Diese Lösung funktionierte für mich auf einem Ubuntu-System, auf dem der Gnome-Keyring-Daemon aufgrund von Dbus-Daemon-Problemen nicht funktionierte. Insbesondere erhalte ich die Fehlermeldung "** Meldung: Verbindung zum Bus der dbus-Sitzung konnte nicht hergestellt werden: Ein dbus-Dämon ohne $ DISPLAY für X11 kann nicht automatisch gestartet werden" und nach dem Setzen der Umgebungsvariablen für die Anzeige erhalte ich die Meldung "** Meldung: Konnte nicht Verbindung zum dbus-Sitzungsbus nicht möglich: // bin / dbus-launch wurde mit folgendem Fehler abnormal beendet: Autolaunch-Fehler: X11-Initialisierung fehlgeschlagen. "
user207863
1
Das braucht mehr Upvotes, behebt das Problem bei virtualisiertem Ubuntu 16.04 fein.
Niels Keurentjes
3
Dies behebt das Problem auch bei Bash für Windows. Ich habe mehrfach versucht, Bash zu starten, und es hat sich an die Passphrase erinnert. Ich habe noch keinen Neustart versucht.
Amr
2
Nachdem ich alle anderen Lösungen ausprobiert hatte, funktionierte dies für mich. Dies sollte die Lösung für das OP sein
João Pimentel Ferreira
20

Eine Problemumgehung für diesen Fehler besteht darin, das Folgende am Ende von hinzuzufügen~/.bashrc

eval `gnome-keyring-daemon --start`
Alex Collins
quelle
2
Sollte der Gnomenschlüsselbund nicht einfach Teil Ihrer Sitzung sein?
Pavel Šimerda
1
Wenn Sie über "sollte" sprechen, dann sollte diese Frage nicht an erster Stelle stehen, wenn alles so perfekt ist
Anwar
1
Ich bin nicht sicher, ob dies dazu gehört .bashrc. Sieht so aus, als müsst ihr es in eine DE-Profildatei einfügen
Dmitry Ginzburg,
3

Benutzer der Fischschale können dieses Skript verwenden , um dasselbe zu tun.

# 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
Daniel Gerber
quelle
0

Ich benutze das:

vim ~/.profile

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

Wenn Sie eine Azure-PPK-Datei verwenden

Konvertieren Sie es einfach in pem und fügen Sie die Berechtigung 400 mit einfachen Schritten hinzu:

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>
GrvTyagi
quelle
0

Unter Ubuntu 18.04 wird der ssh-Agent beim Öffnen der Sitzung X gestartet und in der Datei /etc/X11/Xsession.options verwaltet:

# 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
MaxiReglisse
quelle