it-swarm.com.de

Git über SSH konfigurieren, um sich einmal anzumelden

Ich habe mein Git-Repository über ssh geklont. Jedes Mal, wenn ich durch Drücken oder Ziehen mit dem Origin-Master kommuniziere, muss ich mein Passwort erneut eingeben. Wie kann ich git so konfigurieren, dass ich mein Passwort nicht mehrmals eingeben muss?

183
reprogrammer

Versuchen Sie ssh-add, Sie müssen ssh-agent Ausführen und Ihren privaten Schlüssel halten

(Ok, als Antwort auf die aktualisierte Frage führen Sie zuerst ssh-keygen Aus, um einen öffentlichen und einen privaten Schlüssel als Jefromierklärt zu generieren Sie sollten eine Passphrase verwenden, wenn Sie nicht das Äquivalent eines Klartext-Passworts in Ihrem privaten Schlüssel haben. Aber wenn Sie dies tun, müssen Sie als praktische Angelegenheit ssh-agent wie unten erklärt. )

Sie möchten ssh-agent Im Hintergrund ausführen, während Sie sich anmelden. Sobald Sie sich angemeldet haben, sollten Sie ssh-add Einmal und nur einmal ausführen, um dem Agenten Ihre Passphrase zuzuweisen entschlüssele deinen Schlüssel. Der Agent befindet sich dann nur mit Ihrem Schlüssel im Speicher, der entsperrt und geladen ist, und ist jederzeit einsatzbereit.

Alle Befehle der ssh-Familie1 Wendet sich dann an den Agenten und kann Ihren privaten Schlüssel automatisch verwenden.

Unter OSX (err, macOS ), GNOME und KDE wird ssh-agent Normalerweise automatisch für Sie gestartet. Ich werde die Details durchgehen, falls Sie wie ich auch eine Cygwin- oder andere Windows-Umgebung haben, in der dies mit Sicherheit nicht für Sie getan wird.

Beginnen Sie hier: man ssh-agent.

Es gibt verschiedene Möglichkeiten, den Agenten automatisch auszuführen. Wie in der Manpage erläutert, können Sie es so ausführen, dass es allen anderen Prozessen Ihrer Anmeldesitzung übergeordnet ist. Auf diese Weise sind die bereitgestellten Umgebungsvariablen automatisch in allen Ihren Shells enthalten. Wenn Sie (später) ssh-add Oder ssh aufrufen, haben beide Zugriff auf den Agenten, da sie alle Umgebungsvariablen mit magischen Socket-Pfadnamen oder was auch immer haben.

Alternativ können Sie den Agenten als normales untergeordnetes Element ausführen, die Umgebungseinstellungen in einer Datei speichern und diese Datei beim Start in jeder Shell als Quelle angeben.

Meine OSX- und Ubuntu-Systeme führen das Agent-Start-Setup automatisch aus, sodass ich nur noch einmal ssh-add Ausführen muss. Versuchen Sie, ssh-add Auszuführen, und prüfen Sie, ob dies funktioniert. In diesem Fall müssen Sie dies nur einmal pro Neustart tun.

Mein Cygwin-System brauchte es manuell, also habe ich dies in meinem .profile Und ich habe .bashrc Quellcode .profile:

. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
        ssh-agent > .agent
        . .agent > /dev/null
}

Die Datei .agent Wird vom Skript automatisch erstellt. Es enthält die Definitionen und Exporte der Umgebungsvariablen. Das obige versucht, die .agent-Datei als Quelle zu verwenden, und versucht dann, den Agenten zu ps(1). Wenn dies nicht funktioniert, wird ein Agent gestartet und eine neue Agentendatei erstellt. Sie können auch einfach ssh-add Ausführen und einen Agenten starten, falls dies fehlschlägt.


1. Und sogar lokal und remote Sudo mit der richtigen Pam-Erweiterung.
97
DigitalRoss

Hatte ein ähnliches Problem mit dem GitHub, weil ich das HTTPS-Protokoll verwendete. Um zu überprüfen, welches Protokoll Sie verwenden, führen Sie einfach aus

git config -l

und schauen Sie sich die Zeile an, die mit remote.Origin.url beginnt. So wechseln Sie Ihr Protokoll

git config remote.Origin.url [email protected]:your_username/your_project.git
277
Muein Muzamil

Hier geht es um die Konfiguration von ssh, nicht von git. Wenn Sie dies noch nicht getan haben, sollten Sie ssh-keygen (Mit einer leeren Passphrase) verwenden, um ein Schlüsselpaar zu erstellen. Anschließend kopieren Sie den öffentlichen Schlüssel mit ssh-copy-id An das entfernte Ziel. Wenn Sie nicht mehrere Schlüssel benötigen (z. B. einen sichereren mit einer Passphrase für andere Zwecke) oder wenn Sie einige wirklich seltsame Dinge mit mehreren Identitäten im Gange haben, ist dies ganz einfach:

ssh-keygen   # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa [email protected]

Bearbeiten: Sie sollten eigentlich nur die Antwort von DigitalRoss lesen, aber: Wenn Sie Schlüssel mit Passwörtern verwenden, müssen Sie diese mit ssh-add <key-file> Zu ssh-agent Hinzufügen (und natürlich ein ssh-agent, Wenn in Ihrer Distribution noch keine Distribution für Sie läuft).

23
Cascabel

Stellen Sie sicher, dass Sie beim Klonen des Repositorys die SSH-URL und nicht HTTPS verwendet haben. Wählen Sie im Feld Klon-URL des Repos das SSH-Protokoll aus, bevor Sie die URL kopieren. Siehe Bild unten:

enter image description here

21
Zorayr

Wenn Sie mit [~ # ~] https [~ # ~] (empfohlen) geklont haben, dann: -

git config --global credential.helper cache

und dann

git config --global credential.helper 'cache --timeout=2592000'
  • timeout = 2592000 (30 Tage in Sekunden), um das Caching für 30 Tage zu aktivieren (oder was auch immer für Sie zutrifft).

  • Führen Sie nun einen einfachen git-Befehl aus, der Ihren Benutzernamen und Ihr Kennwort erfordert.

  • Geben Sie Ihre Anmeldeinformationen einmal ein und das Caching ist jetzt 30 Tage lang aktiviert.

  • Versuchen Sie es mit einem beliebigen git-Befehl noch einmal. Jetzt benötigen Sie keine Anmeldeinformationen mehr.

  • Weitere Informationen: - Zwischenspeichern Ihres GitHub-Passworts in Git

Hinweis : Sie benötigen Git 1.7.10 oder neuer, um den Hilfsprogramm für Anmeldeinformationen zu verwenden. Beim Neustart des Systems müssen wir möglicherweise das Passwort erneut eingeben.

11

Erweiterung von Mueins Gedanken für diejenigen, die es vorziehen, Dateien direkt zu bearbeiten, anstatt Befehle in git-bash oder terminal auszuführen.

Wechseln Sie in das Git-Verzeichnis Ihres Projekts (Projektstamm auf Ihrem lokalen Computer) und öffnen Sie die Konfigurationsdatei. Suchen Sie dann nach [remote "Origin"] und stellen Sie die URL-Konfiguration wie folgt ein:

[remote "Origin"]
    #the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
    url = [email protected]:<username>/<projectname>.git
7
uchamp

Ich denke, hier gibt es zwei verschiedene Dinge. Die erste besteht darin, dass der Benutzer für die normale SSH-Authentifizierung das Kennwort des Kontos eingeben muss (wobei das Kennwort des Kontos abhängig von der sshd-Konfiguration anhand verschiedener Methoden authentifiziert wird).

Sie können vermeiden, dieses Kennwort mithilfe von Zertifikaten einzugeben. Bei Zertifikaten müssen Sie noch ein Kennwort eingeben, diesmal jedoch das Kennwort Ihres privaten Schlüssels (unabhängig vom Kennwort des Kontos).

Befolgen Sie dazu die Anweisungen von steveth45:

Mit Authentifizierung mit öffentlichem Schlüssel .

Wenn Sie vermeiden möchten, das Kennwort des Zertifikats jedes Mal neu einzugeben, können Sie ssh-agent verwenden, wie von DigitalRoss ausgeführt

Die genaue Vorgehensweise hängt von Unix und Windows ab. Grundsätzlich müssen Sie jedoch ssh-agent bei der Anmeldung im Hintergrund ausführen und anschließend bei der ersten Anmeldung ssh-add ausführen, um dem Agenten Ihre Passphrase zuzuweisen. Alle Befehle der ssh-Familie werden dann den Agenten konsultieren und automatisch Ihre Passphrase abrufen.

Hier starten: man ssh-agent.

Das einzige Problem von ssh-agent ist, dass Sie zumindest unter * nix das Zertifikatspasswort für jede neue Shell eingeben müssen. Dann wird das Zertifikat "geladen" und Sie können es verwenden, um sich bei einem SSH-Server zu authentifizieren, ohne ein Kennwort einzugeben. Aber das ist auf dieser speziellen Shell.

Mit Schlüsselbund können Sie dasselbe tun wie mit ssh-agent, jedoch "systemweit". Sobald Sie Ihren Computer einschalten, öffnen Sie eine Shell und geben das Kennwort des Zertifikats ein. Und dann wird jede andere Shell dieses "geladene" Zertifikat verwenden und Ihr Passwort wird nie wieder abgefragt, bis Sie Ihren PC neu starten.

Gnome hat eine ähnliche Anwendung namens Gnome-Schlüsselbund , die Sie bei der ersten Verwendung nach dem Kennwort Ihres Zertifikats fragt und dieses dann sicher speichert, damit Sie nicht erneut gefragt werden.

6
Gaston
ssh-keygen -t rsa

Wenn Sie nach einer Passphrase gefragt werden, lassen Sie sie leer, drücken Sie einfach die Eingabetaste. so einfach ist das!!

4

Wenn Sie Github verwenden, haben sie ein sehr nettes Tutorial, das es klarer erklärt (zumindest für mich).

http://help.github.com/set-up-git-redirect/

4
Miles

Versuchen Sie dies aus der Box, aus der Sie schieben

    ssh [email protected]

Sie sollten dann eine willkommene Antwort von github erhalten und in Ordnung sein, dann Push.

3
toonsend

Ich musste ein Git-Repo von einem Server klonen, der keine Anmeldung über den SSH-Schlüssel erlaubte, sondern nur mit einem Benutzer/Passwort. Ich habe keine Möglichkeit gefunden, das Git-Plugin für die Verwendung einer einfachen Benutzer-/Kennwortkombination zu konfigurieren. Daher habe ich den folgenden Shell-Befehl als vorbereitenden Schritt auf einem Linux-Build-Rechner hinzugefügt, der vom erwarteten Tool abhängt (apt-get install expect):

DIESES IS NICHT EINE GUTE ART, DIESES PROBLEM ALS IHR PASSWORT ZU LÖSEN IS ALS KLARER TEXT IN DER KONFIGURATION UND DEN PROTOKOLLEN DES JENKINS-JOBS ANGEZEIGT! NUR WENN ES GIBT IS KEINE MÖGLICHKEIT, RSA-KEY-AUTHENTIFIZIERUNG ZU KONFIGURIEREN OR ANDERE KONFIGURATIONSMÖGLICHKEITEN!

rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone [email protected]:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
2
Jan

Fügen Sie eine einzelne Zeile AddKeysToAgent yes Oben in der .ssh/config-Datei ein. Natürlich muss ssh-agent vorher laufen. Wenn es nicht läuft (mit prep ssh-agent Prüfen), dann starte es einfach eval $(ssh-agent)

Jetzt wird der Schlüssel systemweit in den Speicher geladen und Sie müssen die Passphrase nicht erneut eingeben.

Die Quelle der Lösung ist https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578

1
infoclogged

Ich habe versucht, zu vermeiden, die Passphrase ständig zu tippen, auch weil ich ssh unter Windows verwende. Was ich getan habe, war, meine .profile-Datei so zu ändern, dass ich meine Passphrase in einer bestimmten Sitzung eingebe. Das ist also der Code:

    SSH_ENV="$HOME/.ssh/environment"

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

    # test for identities
    function test_identities {
        # test whether standard identities have been added to the agent already
        ssh-add -l | grep "The agent has no identities" > /dev/null
        if [ $? -eq 0 ]; then
            ssh-add
            # $SSH_AUTH_SOCK broken so we start a new proper agent
            if [ $? -eq 2 ];then
                start_agent
            fi
        fi
    }

    # check for running ssh-agent with proper $SSH_AGENT_PID
    if [ -n "$SSH_AGENT_PID" ]; then
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
      test_identities
        fi
    # if $SSH_AGENT_PID is not properly set, we might be able to load one from
    # $SSH_ENV
    else
        if [ -f "$SSH_ENV" ]; then
      . "$SSH_ENV" > /dev/null
        fi
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
            test_identities
        else
            start_agent
        fi
    fi

also gebe ich meine Passphrase einmal in einer Sitzung ein.

0
David Blay