Ich git push
arbeite an einem entfernten Git-Repository.
Jeder push
wird mich zur Eingabe auffordern username
und password
. Ich möchte es bei jedem Push vermeiden, aber wie konfiguriere ich es, um es zu vermeiden?
Ich git push
arbeite an einem entfernten Git-Repository.
Jeder push
wird mich zur Eingabe auffordern username
und password
. Ich möchte es bei jedem Push vermeiden, aber wie konfiguriere ich es, um es zu vermeiden?
Antworten:
Öffnen Sie das Terminal, 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 exemplarische Vorgehensweise für Putty Gen für die oben genannten Schritte
Dieser Schritt hängt davon ab, wie Ihre Fernbedienung eingerichtet ist.
Wenn es sich um ein GitHub-Repository handelt und Sie über Administratorrechte verfügen, gehen Sie zu den Einstellungen und klicken Sie auf "SSH-Schlüssel hinzufügen". Kopieren Sie den Inhalt von ~/.ssh/id_rsa.pub
in das Feld "Schlüssel".
Wenn Ihr Repository von einer anderen Person verwaltet wird, geben Sie dem Administrator Ihre id_rsa.pub
.
Wenn Ihr Remote-Repository von Ihrem verwaltet wird, können Sie diesen Befehl beispielsweise verwenden:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Wenn Sie die obigen Schritte ausgeführt haben und weiterhin die Kennwortabfrage erhalten, stellen Sie sicher, dass Ihre Repo-URL im Formular enthalten ist
git+ssh://git@github.com/username/reponame.git
im Gegensatz zu
https://github.com/username/reponame.git
Führen Sie Folgendes aus, um Ihre Repo-URL anzuzeigen:
git remote show origin
Sie können die URL ändern mit:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Dieser Abschnitt enthält die Antwort von Eric P.
git remote set-url origin git@github.com:/username/projectname.git
Führen Sie den folgenden Befehl aus, um das Caching 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://USERNAME@github.com': <PASSWORD>
Die Verwendung sollte auch angeben, dass das Caching abläuft .
git config --global credential.helper 'cache --timeout 7200'
Nach dem Aktivieren des Caching von Anmeldeinformationen wird dieser für 7200 Sekunden (2 Stunden) zwischengespeichert .
Hinweis: Hilfsprogramm für Anmeldeinformationen zum Speichern eines unverschlüsselten Kennworts auf der lokalen Festplatte.
git
Manpage: "Wenn Sie diesen Helfer verwenden, werden Ihre Passwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt."
store
Helfer für Anmeldeinformationen das Kennwort unverschlüsselt auf der Festplatte speichert.
git config --unset credential.helper
Wenn Sie Ihre SSH-Schlüssel bereits eingerichtet haben und weiterhin die Kennwortabfrage erhalten, stellen Sie sicher, dass Ihre Repo-URL im Formular enthalten ist
git+ssh://git@github.com/username/reponame.git
im Gegensatz zu
https://github.com/username/reponame.git
Führen Sie Folgendes aus, um Ihre Repo-URL anzuzeigen:
git remote show origin
Sie können die URL folgendermaßen ändern git remote set-url
:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
lokal verwendet und dann versucht hatte, nach dem Hinzufügen der Fernbedienung von einem neuen Repo auf der GitHub-Website zu pushen.
git@github.com/username/reponame.git
Verwenden Sie einfach die --repo
Option für den Befehl git push. So was:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
funktioniert, wenn es Ihnen nichts ausmacht, jedes Mal nach dem Passwort zu suchen.
git push --repo https://github.com/Username/repo
funktioniert es ohne die .git
Erweiterung
Sie können den git-credential-store über verwenden
git config credential.helper store
die speichert Ihr Passwort unverschlüsselt im Dateisystem :
Wenn Sie diesen Hilfsprogramm verwenden, werden Ihre Kennwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt. Wenn dies kein akzeptabler Kompromiss bei der Sicherheit ist, versuchen Sie es mit git-credential-cache oder suchen Sie einen Helfer, der in den von Ihrem Betriebssystem bereitgestellten sicheren Speicher integriert ist.
Verwenden Sie den Git-Credential-Cache, in dem das Kennwort standardmäßig 15 Minuten lang gespeichert ist.
git config credential.helper cache
Verwenden Sie --timeout
(hier 5 Minuten) , um ein anderes Zeitlimit festzulegen.
git config credential.helper 'cache --timeout=300'
- Wenn Sie einen Mac verwenden, verfügt Git über einen "osxkeychain" -Modus , in dem Anmeldeinformationen im sicheren Schlüsselbund zwischengespeichert werden, der an Ihr Systemkonto angehängt ist. Diese Methode speichert die Anmeldeinformationen auf der Festplatte und läuft nie ab. Sie werden jedoch mit demselben System verschlüsselt, auf dem HTTPS-Zertifikate und automatische Safari-Ausfüllungen gespeichert sind. Wenn Sie Folgendes in der Befehlszeile ausführen, wird diese Funktion aktiviert :
git config --global credential.helper osxkeychain
. Sie müssen die Anmeldeinformationen auch mit der Schlüsselbund-App im Schlüsselbund speichern.- Wenn Sie Windows verwenden, können Sie einen Hilfsprogramm namens "Git Credential Manager für Windows" installieren. Dies ähnelt dem oben beschriebenen "osxkeychain" -Helfer, verwendet jedoch den Windows Credential Store, um vertrauliche Informationen zu steuern. Es kann unter https://github.com/Microsoft/Git-Credential-Manager-for-Windows gefunden werden . [betont meine]
credential.helper cache
funktioniert NICHT. Es sollte sein git config --global credential.helper wincred
.
Schritt 1 -
Erstellen Sie SSH-Schlüssel auf Ihrem Linux-System mit dem folgenden Befehl
ssh-keygen -t rsa -b 4096 -C "your_email"
Es wird nach Passphrase und Dateiname gefragt (Standard 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 ssh des Github-Kontos 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 git@github.com: user_name / repo_name.git mit dem folgenden Befehl zu Ihrem lokalen Git-Repo hinzu.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
Das ist es.
Verbinden Sie Ihren Git-Client mit Ihrem Betriebssystem-Anmeldeinformationsspeicher. In Windows binden Sie beispielsweise den Helfer für Anmeldeinformationen an wincred:
git config --global credential.helper wincred
Verwenden Sie unter Windows stattdessen Folgendes: 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 wollte nur mehrmals auf die oben genannte Lösung hinweisen:
git config credential.helper store
Sie können jeden Befehl verwenden, für den danach ein Kennwort erforderlich ist. Du musst nicht pushen. (Sie können zum Beispiel auch ziehen) Danach müssen Sie Ihren Benutzernamen / Ihr Passwort nicht erneut eingeben.
Meine Lösung unter Windows:
ssh-keygen -t rsa
(Drücken Sie die Eingabetaste für alle Werte)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Wenn Ihr PC sicher ist oder Sie sich nicht um die Passwortsicherheit kümmern, kann dies sehr einfach erreicht werden. Angenommen, das Remote-Repository befindet sich auf GitHub und origin
ist Ihr lokaler Name für das Remote-Repository. Verwenden Sie diesen Befehl
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
Das --push
Flag stellt sicher, dass dadurch die URL des Repositorys nur für den git push
Befehl geändert wird . (Die im ursprünglichen Beitrag gestellte Frage git push
bezieht sich nur auf Befehle. Das Erfordernis eines Benutzernamens + Kennworts nur für Push-Vorgänge ist das normale Setup für öffentliche Repositorys auf GitHub. Beachten Sie, dass für private Repositorys auf GitHub auch ein Benutzername + Kennwort für Pull- und Fetch-Vorgänge erforderlich ist Für ein privates Repository möchten Sie also nicht --push flag
...) verwenden
WARNUNG: Dies ist von Natur aus unsicher, weil:
Ihr ISP oder jeder, der Ihre Netzwerkzugriffe protokolliert, kann das Kennwort in der URL leicht im Klartext sehen.
Jeder, der Zugriff auf Ihren PC erhält, kann Ihr Passwort mit anzeigen git remote show origin
.
Deshalb ist die Verwendung eines SSH-Schlüssels die akzeptierte Antwort.
Selbst ein SSH-Schlüssel ist nicht ganz sicher . Jeder, der Zugriff auf Ihren PC erhält, kann beispielsweise weiterhin Pushs ausführen, die Ihr Repository zerstören, oder - schlimmer noch - Push-Commits durchführen, die geringfügige Änderungen an Ihrem Code vornehmen. (Alle Push-Commits sind auf GitHub offensichtlich gut sichtbar. Wenn jedoch jemand Ihren Code heimlich ändern wollte, konnte er --amend
ein vorheriges Commit durchführen, ohne die Commit-Nachricht zu ändern, und dann ein Push-Force erzwingen. Das wäre verstohlen und in der Praxis ziemlich schwer zu bemerken. )
Die Offenlegung Ihres Passworts ist jedoch schlimmer . Wenn ein Angreifer Kenntnis von Ihrem Benutzernamen und Passwort erhält, kann er Sie beispielsweise von Ihrem eigenen Konto sperren, Ihr Konto löschen, das Repository dauerhaft löschen usw.
Alternativ können Sie der Einfachheit und Sicherheit halber nur Ihren Benutzernamen in die URL eingeben, sodass Sie jedes Mal Ihr Passwort eingeben müssen, git push
aber nicht jedes Mal Ihren Benutzernamen angeben müssen. (Ich mag diesen Ansatz sehr. Wenn ich das Passwort eingeben muss, kann ich jedes Mal nachdenken git push
, damit ich nicht git push
versehentlich nachdenken kann .)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, bricht es Befehl denken Passwort nach @ als Teil des Git-Servers?
Soweit ich weiß, gibt es einfach zwei sichere Möglichkeiten: ssh oder passwd, die mit einem Keystore verschlüsselt wurden .
cat ~/.ssh/id_rsa.pub
, fügen Sie es dort ein, benennen und speichern Sie es (wenn Sie keine solche Datei haben, generieren Sie eine für sich selbst ssh-keygen -t rsa
- einfach für alle Eingabeaufforderungen die Eingabetaste eingeben).git remote set-url origin git+ssh://git@github.com/username/reponame.git
- Sie können dies zuerst durch überprüfengit remote -v
);touch t; git add t; git commit -m "test"; git push
und bestätigen Sie mit Ja, um die Welt ohne Passwort zu genießen .Wenn Sie nur git config --global credential.helper store
wie bereits erwähnt verwenden, werden Ihre unverschlüsselten Passwörter nur im Klartext unter gespeichert~/.git-credentials
dem es nicht sicher ist, wie es sich anhört.
Versuchen Sie es als zu verschlüsseln
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://git@github.com/username/reponame.git
.
All dies entsteht, weil git in den Befehlen clone / pull / push / fetch keine Option zum Senden der Anmeldeinformationen über eine Pipe bietet. Obwohl es credential.helper gibt, speichert es im Dateisystem oder erstellt einen Daemon usw. Häufig handelt es sich bei den Anmeldeinformationen von GIT um Systeme auf Systemebene, und die Sicherheit liegt bei der Anwendung, die die git-Befehle aufruft. Sehr unsicher.
Hier ist, was ich umgehen musste. 1. 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 vom Format http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} in http: // {myuser}: {mypwd} @ {my_repo_ip_address} geändert haben /{myrepo_name.git}
Löschen Sie dann das Repository des Kennworts wie im nächsten Abschnitt beschrieben.
SPÜLEN
Nun, das wäre gegangen und
Wenn Ihre Anwendung Java zum Ausgeben dieser Befehle verwendet, verwenden Sie ProcessBuilder anstelle von Runtime. Wenn Sie Runtime verwenden müssen, verwenden Sie getRunTime (). Exec, das das String-Array als Argumente mit / bin / bash und -c als Argumente verwendet, anstatt das, das einen einzelnen String als Argument verwendet.
GIT FETCH / PULL / PUSH
Sie müssen einen privaten SSH-Schlüssel einrichten. Sie können auf dieser Seite nachlesen , wie das Setup unter Mac durchgeführt wird. Wenn Sie unter Linux arbeiten, sollte die Anleitung fast dieselbe sein. Unter Windows benötigen Sie ein Tool wie MSYS .