Ich git Push
meine Arbeit in ein entferntes Git-Repository.
Jede Push
fordert mich auf, username
und password
einzugeben. Ich möchte es für jeden Push vermeiden, aber wie konfigurieren, um es zu vermeiden?
Terminal öffnen, um SSH-Schlüssel zu erstellen:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Funktioniert nur, wenn das Festschreibungsprogramm Zertifikate/private und öffentliche SSH-Schlüssel verwenden kann.)
Hier ist eine Komplettlösung auf PuTTY-Gen für die obigen Schritte
Dieser Schritt hängt von der Einrichtung der Fernbedienung ab.
Wenn es sich um ein GitHub-Repository handelt und Sie über Administratorrechte verfügen, gehen Sie zu settings und klicken Sie auf 'SSH-Schlüssel hinzufügen'. Kopieren Sie den Inhalt Ihres ~/.ssh/id_rsa.pub
in das Feld 'Key'.
Wenn Ihr Repository von jemand anderem verwaltet wird, geben Sie dem Administrator Ihren id_rsa.pub
.
Wenn Ihr Remote-Repository von Ihrem verwaltet wird, können Sie diesen Befehl beispielsweise verwenden:
scp ~/.ssh/id_rsa.pub [email protected]_IP:~/.ssh/authorized_keys/id_rsa.pub
Wenn Sie die obigen Schritte ausgeführt haben und immer noch die Kennworteingabeaufforderung erhalten, stellen Sie sicher, dass sich die Repo-URL im Formular befindet
git+ssh://[email protected]/username/reponame.git
im Gegensatz zu
https://github.com/username/reponame.git
Um die Repo-URL anzuzeigen, führen Sie Folgendes aus:
git remote show Origin
Sie können die URL mit ändern:
git remote set-url Origin git+ssh://[email protected]/username/reponame.git
[1] Dieser Abschnitt enthält die Antwort von Eric P
Führen Sie den folgenden Befehl aus, um die Zwischenspeicherung von Anmeldeinformationen zu aktivieren.
$ git config credential.helper store
$ git Push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>
Verwendung sollte auch angeben Zwischenspeicherung ablaufen ,
git config --global credential.helper 'cache --timeout 7200'
Nach dem Aktivieren der Zwischenspeicherung der Berechtigungsnachweise wird sie für 7200 Sekunden (2 Stunden) zwischengespeichert.
Hinweis: Credential Helper, der das unverschlüsselte Kennwort auf der lokalen Festplatte speichert.
Wenn Sie Ihre SSH-Schlüssel bereits eingerichtet haben und immer noch die Kennwort-Eingabeaufforderung erhalten, stellen Sie sicher, dass sich Ihre Repo-URL im Formular befindet
git+ssh://[email protected]/username/reponame.git
im Gegensatz zu
https://github.com/username/reponame.git
Um die Repo-URL anzuzeigen, führen Sie Folgendes aus:
git remote show Origin
Sie können die URL mit git remote set-url
wie folgt ändern:
git remote set-url Origin git+ssh://[email protected]/username/reponame.git
Verwenden Sie einfach die --repo
-Option für den git Push-Befehl. So was:
$ git Push --repo https://name:[email protected]/name/repo.git
Sie können den git-credential-store via verwenden
git config credential.helper store
welche Ihr Passwort unverschlüsselt im Dateisystem speichert :
Mit diesem Helfer werden Ihre Kennwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt. Wenn dies keine akzeptable Sicherheitsüberprüfung darstellt, versuchen Sie git-credential-cache oder suchen Sie einen Helfer, der sich in den sicheren Speicher Ihres Betriebssystems einfügt.
Verwenden Sie den git-credential-cache , der das Kennwort standardmäßig 15 Minuten lang speichert.
git config credential.helper cache
um ein anderes Timeout einzustellen, verwenden Sie --timeout
(hier 5 Minuten).
git config credential.helper 'cache --timeout=300'
- Wenn Sie einen Mac verwenden, verfügt Git über einen Modus "osxkeychain", der Anmeldeinformationen im sicheren Schlüsselbund speichert, der Ihrem Systemkonto zugeordnet ist. Bei dieser Methode werden die Anmeldeinformationen auf der Festplatte gespeichert, und sie verfallen nie. Sie werden jedoch mit demselben System verschlüsselt, das HTTPS-Zertifikate und Safari-Auto-Fills speichert.
- Wenn Sie Windows verwenden, können Sie einen Helper namens "Git Credential Manager für Windows" installieren.} Dies ähnelt dem oben beschriebenen "osxkeychain" -Helper, verwendet jedoch den Windows Credential Store zur Steuerung vertraulicher Informationen. Sie finden es unter https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [betont meine]
Ich habe den https-Link (https://github.com/org/repo.git
) Anstelle des ssh-Links verwendet.
[email protected]:org/repo.git
Switching hat das Problem für mich gelöst!
Verbinden Sie Ihren Git-Client mit dem Speicher für Ihr Betriebssystem für Anmeldeinformationen. In Windows binden Sie beispielsweise den Credential Helper an wincred:
git config --global credential.helper wincred
Ich wollte nur etwas auf die oben erwähnte Lösung hinweisen:
git config credential.helper store
Sie können danach jeden Befehl verwenden, für den ein Kennwort erforderlich ist. Sie müssen nicht schieben. (Sie können zum Beispiel auch ziehen) Danach müssen Sie Ihren Benutzernamen und Ihr Kennwort nicht erneut eingeben.
Unter Windows verwenden Sie stattdessen diese Option. Dies funktioniert für mich:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
z.B.
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add Origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git Push Origin master
Ich verwendete die Antwort, die Pavel vorschlug, und sie funktionierte für mich. Mein Unterschied war, es so zu tun, während ich die Fernbedienung hinzufügte: git remote add (alias) https://(name:password)@github.com/(the remote address).git
Meine Lösung unter Windows:
ssh-keygen -t rsa
(für alle Werte die Eingabetaste drücken)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Durch Ausführen des folgenden Befehls wurde das Problem für mich gelöst.
git config --global credential.helper wincred
Bitte beachten Sie die nachstehende Github-Dokumentation:
https://help.github.com/articles/caching-your-github-password-in-git/
Soweit ich weiß, gibt es einfach zwei Möglichkeiten: safe ssh oder passwd mit einem Keystore verschlüsselt.
cat ~/.ssh/id_rsa.pub
, Dort einfügen, benennen und speichern (wenn Sie keine solche Datei haben, erstellen Sie eine für sich selbst mit ssh-keygen -t rsa
- nur Enter für alle Eingabeaufforderungen) ;git remote set-url Origin git+ssh://[email protected]/username/reponame.git
- Sie können dies zuerst mit git remote -v
) Überprüfen.touch t; git add t; git commit -m "test"; git Push
Und bestätigen Sie mit Ja, um die passwortfreie Welt zu genießen.Wenn Sie nur git config --global credential.helper store
Verwenden, wie bereits erwähnt, werden Ihre unverschlüsselten Passwörter nur im Klartext unter ~/.git-credentials
Gespeichert. Das ist nicht sicher, wie es sich anhört.
Versuchen Sie es verschlüsseln als
Sudo apt-get install libgnome-keyring-dev
Sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
In diesem Fall verwenden Sie
https://[email protected]/username/reponame.git
.
Schritt 1 -
Erstellen Sie SSH-Schlüssel auf Ihrem Linux-System, indem Sie den folgenden Befehl verwenden
ssh-keygen -t rsa -b 4096 -C "your_email"
Sie werden nach Passphrase und Dateinamen gefragt (Standardwert ist ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub).
Schritt 2 -
Sobald die Dateien erstellt wurden, fügen Sie den öffentlichen Schlüssel id_rsa.pub zum Abschnitt github account ssh hinzu.
Schritt 3 -
Fügen Sie auf Ihrem Computer den privaten Schlüssel id_rsa mit dem folgenden Befehl zum ssh-agent hinzu
ssh-add ~/.ssh/id_rsa
Schritt 4 -
Fügen Sie nun die Remote-URL [email protected]: benutzername/repo_name.git zu Ihrem lokalen Git-Repo hinzu, indem Sie den folgenden Befehl verwenden.
git remote remove Origin
git remote add Origin [email protected]:user_name/repo_name.git
Das ist es.
All dies entsteht, weil git in den Befehlen clone/pull/Push/fetch keine Option zum Senden der Anmeldeinformationen über eine Pipe bietet. Es gibt zwar credential.helper, speichert es jedoch im Dateisystem oder erstellt einen Dämon usw. Häufig handelt es sich bei den Berechtigungsnachweisen von GIT um Systemebenen. Um sie sicher zu halten, muss die Anwendung die git-Befehle aufrufen. Sehr unsicher.
Hier ist was ich umgehen musste. Die Git-Version (git -version) sollte größer oder gleich 1.8.3 sein.
GIT CLONE
Verwenden Sie zum Klonen "git clone URL", nachdem Sie die URL aus dem Format http: // {myuser} @ {my_repo_ip_address}/{myrepo_name.git} in http: // {myuser}: {mypwd} @ {my_repo_ip_address} geändert haben /{myrepo_name.git}
Bereinigen Sie dann das Repository des Passworts wie im nächsten Abschnitt.
BEREINIGEN
Nun, das wäre gegangen und
Wenn Ihre Anwendung Java zur Ausgabe dieser Befehle verwendet, verwenden Sie ProcessBuilder anstelle von Runtime. Wenn Sie Runtime verwenden müssen, verwenden Sie getRunTime (). Exec, das String-Array als Argumente mit/bin/bash und -c als Argumente verwendet, anstatt das Argument, das einen einzelnen String als Argument verwendet.
GIT FETCH/PULL/Push
Wenn Ihr PC sicher ist oder Sie sich nicht für die Passwortsicherheit interessieren, kann dies sehr einfach erreicht werden. Wenn sich das Remote-Repository auf GitHub befindet und Origin
Ihr lokaler Name für das Remote-Repository ist, verwenden Sie diesen Befehl
git remote set-url --Push Origin https://<username>:<password>@github.com/<repo>
Das Flag --Push
stellt sicher, dass hierdurch nur die URL des Repositorys für den Befehl git Push
geändert wird. (Die Frage, die im ursprünglichen Beitrag gestellt wurde, betrifft nur den Befehl git Push
. Die Angabe eines Benutzernamens + Kennworts nur für Push-Vorgänge ist das normale Setup für public - Repositorys auf GitHub. Beachten Sie, dass private - Repositorys auf GitHub ebenfalls erforderlich sind einen Benutzernamen + ein Kennwort für Abruf- und Abrufvorgänge, sodass Sie für ein privates Repository nicht den --Push flag
... verwenden möchten.
WARNUNG: Dies ist von Natur aus unsicher, weil:
ihr Internetdienstanbieter oder jeder, der Ihre Netzwerkzugriffe protokolliert, kann das Kennwort in Klartext in der URL anzeigen.
jeder, der Zugriff auf Ihren PC hat, kann Ihr Passwort mit git remote show Origin
anzeigen.
Daher ist die Verwendung eines SSH-Schlüssels die akzeptierte Antwort.
Selbst ein SSH-Schlüssel ist nicht absolut sicher. Jeder, der Zugriff auf Ihren PC erhält, kann beispielsweise noch Pushs ausführen, die Ihr Repository ruinieren, oder - noch schlimmer - Push-Commits, indem Sie geringfügige Änderungen an Ihrem Code vornehmen. (Alle Push-Commits sind offensichtlich auf GitHub sehr gut sichtbar. Wenn jedoch jemand Ihren Code unbemerkt ändern wollte, könnte er einen vorherigen Commit --amend
en, ohne die Commit-Nachricht zu ändern, und dann Push erzwingen. Dies wäre stealthy und in der Praxis recht schwer zu bemerken .)
Aber das Verraten Ihres Passworts ist schlechter. Wenn ein Angreifer Kenntnis von Ihrem Benutzernamen + Kennwort erlangt, kann er beispielsweise Ihr eigenes Konto sperren, Ihr Konto löschen, das Repository dauerhaft löschen usw.
Alternativ - zur Vereinfachung der Sicherheit und - können Sie nur Ihren Benutzernamen in der URL angeben, so dass Sie Ihr Passwort jedes Mal eingeben müssen, wenn Sie git Push
, aber nicht jedes Mal Ihren Benutzernamen angeben müssen. (Ich mag diesen Ansatz sehr, da ich das Passwort eingeben muss, wenn ich git Push
nachdenke, um nachzudenken. Ich kann also nicht aus Versehen git Push
.)
git remote set-url --Push Origin https://<username>@github.com/<repo>
Es scheint, dass es zumindest bei der Verwendung von TortoiseGIT unter Windows möglich ist, die SSH-Schlüssel zu erstellen und diese einfach auf den GIT-Server zu übertragen:
> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]