Frage Wie gib ich git clone in einem Skript Benutzername / Passwort, aber nicht die Zugangsdaten in .git / config


Ich klicke ein Git Repository in einem Skript wie folgt:

git clone https://user:password@host.com/name/.git

Das funktioniert, aber mein Benutzername und mein Passwort! sind jetzt in der Ursprungs-URL gespeichert .git/config.

Wie kann ich das verhindern, aber immer noch in einem Skript (also keine manuelle Passworteingabe)?


20
2017-11-15 15:35


Ursprung


Sie könnten wahrscheinlich den Ursprung später aktualisieren: git remote set-url origin https://host.com/name/.git - ceejayoz
@ceejayoz Ja, das ist möglich. Danke für die Idee. Ich hopfe immer noch für eine Lösung, die die Anmeldeinformationen nicht einmal vorübergehend speichert. - Nathan
Sicher - verwenden Sie SSH-basierte Authentifizierung mit einem Schlüssel. - ceejayoz
Gibt es einen Grund, warum Sie https anstelle von SSH verwenden? SSH unterstützt Schlüssel. - mzhaase
Ich verstehe die Frage, aber warum geht es Ihnen gut, wenn das Passwort im Skript gespeichert wird? Das ist genauso schlecht. - Martijn Courteaux


Antworten:


Die Methode, die ich benutze, ist tatsächlich eine zu verwenden git pull anstelle eines Klons. Das Skript würde wie folgt aussehen:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

Dadurch wird Ihr Benutzername oder Passwort nicht gespeichert .git/config. Wenn jedoch keine anderen Schritte unternommen werden, werden der Klartext-Benutzername und das Passwort während der Ausführung des Prozesses aus Befehlen sichtbar, die aktuelle Prozesse (z. ps).

Ein weiterer Vorschlag, den ich machen würde (wenn Sie ssh nicht verwenden können), ist die Verwendung eines OAuth-Tokens anstelle von Klartext Benutzername / Passwort, da es etwas sicherer ist. Sie können ein OAuth-Token aus Ihren Profileinstellungen generieren: https://github.com/settings/tokens.

Dann würde der Pull-Befehl verwendet werden

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master

15
2017-11-16 01:33



Unbedingt kann ich keine Autotoken verwenden. Ich verwende nicht github, sondern einen privaten Server. - Nathan
Es sollte auch beachtet werden, dass der Benutzername und das Passwort in z.B. ps während der Pull ausgeführt wird (zumindest, wenn Sie verhindert haben, dass Benutzer die Prozesse der anderen sehen) - derobert
Punkte für die Verwendung des Eides. Es ist genau das, was ich in Produktion / Staging / Dev benötigt habe. - RobotHumans


Sie können Ihre Verbindungsguthaben in Ihrem Konto eingeben ~/.netrc Datei. Etwas in der Art von:

machine host.example.net
login bart
password eatmyshorts

Stellen Sie sicher, dass diese Datei auf 600 chmod ist. Wenn Sie Windows verwenden, kann der folgende Link nützlich sein: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on-windows-to-save-user-and-password

Persönlich habe ich eine Tendenz, SSH-Schlüssel für Authzwecke zu verwenden (wenn Sie natürlich erlaubt sind).


10
2017-11-15 16:16



Nun, das würde mein Passwort in ~ / .netrc hinterlassen. Ich will das auch nicht. - Nathan


IMO die beste Lösung ist eine benutzerdefinierte verwenden GIT_ASKPASS helfer und übergeben Sie das Passwort als weitere Umgebungsvariable. Erstellen Sie beispielsweise eine Datei git-askpass-helper.sh wie:

#!/bin/sh
exec echo "$GIT_PASSWORD"

und dann rennen git clone https://username@hostname/repo mit Umgebungsvariablen GIT_ASKPASS=/path/to/git-askpass-helper.sh und GIT_PASSWORD=nuclearlaunchcodes.

Dies hat den Vorteil, dass das Passwort auch in der Prozessliste nicht sichtbar ist.


4
2018-05-18 09:20



+1 für kreative Lösung. Dies wäre ein wenig sicherer als die git pull Lösung und ermöglichen es Ihnen, das Klartext-Passwort als ein Geheimnis in Ihrem automatisierten Bereitstellungs-Tool der Wahl zu speichern. - FGreg