Antworten Sie in einem Bash-Skript mit "Ja"

24

Ich versuche, git cloneein Bash-Skript zu durchlaufen, aber das erste Mal, dass ich das Skript und den Server ausführe, ist noch nicht bekannt, dass das Skript fehlschlägt. Ich habe so etwas:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Aber es ignoriert die yes. Wissen Sie, wie Sie git clonedas Hinzufügen des Schlüssels zu den bekannten Hosts erzwingen können ?

Rafael
quelle
Was ist echo yes | git clone [email protected]:repo/repoo.git?
Asfallows
3
@asfallows, @Rafael: echo yesist kein guter Ansatz: Wenn Sie den Befehl zum zweiten Mal ausführen, werden Sie von ssh nicht gefragt, ob Sie fortfahren möchten, da der Serverschlüssel bereits bekannt ist.
Gilles 'SO - hör auf böse zu sein'

Antworten:

21

Fügen Sie Ihrer ~/.ssh/configDatei Folgendes hinzu :

Host github.com
    StrictHostKeyChecking no

Wenn Sie mit dem open-ssh-Client eine Remote-Shell einrichten (mit dem git-Client), sollten Sie die Schlüsselüberprüfung zu github.com überspringen.

Dies ist eigentlich eine schlechte Idee, da jede Form des Überspringens der Schecks (ob Sie automatisch Ja drücken oder den Scheck zunächst überspringen) Platz für einen Mann mit mittlerer Sicherheitslücke schafft. Besser wäre es, den Fingerabdruck abzurufen und zu validieren und in der known_hostsDatei zu speichern, bevor Sie ein Skript ausführen müssen, das automatisch eine Verbindung herstellt.

Caleb
quelle
2
Mit einer starken Präferenz, den Fingerabdruck abzurufen und zu validieren und ihn known_hostsvorher in der Datei zu speichern .
Gilles 'SO - hör auf böse zu sein'
1
Vielen Dank für Ihre Antwort. Am Ende folgte ich dem Ansatz, den Fingerabdruck in die known_hosts einzufügen. Es ist wie sicherer :)
Rafael
Oh, ich benutze Marionetten, um das zu tun. Wenn jemand daran interessiert ist, es hier zu verwenden, ist das Rezept: gist.github.com/1155725
Rafael
5

yesAusgänge y. RSA-Schlüsselannahmebedürfnisse yes. Sie könnten versuchen , yes yes | git clone [email protected]:repo/repoo.gitso yesgibt yesstatt y.

jfg956
quelle
5
Aus irgendeinem Grund hat das mit git clone für mich nicht funktioniert.
Matt V.
Weder hat es bei mir geklappt. Auch echo "yes" | ...nicht. Ich glaube, ich gitakzeptiere keine Rohrleitungen. Vielleicht nur in einer Version?
Udondan
3

Das Ausführen ssh-keyscan -H github.com >> ~/.ssh/known_hostsvor dem Klonen fügt den Schlüssel hinzu und verhindert, dass die Eingabeaufforderung angezeigt wird.

Natürlich ist dieser Ansatz auch für einen MITM-Angriff anfällig.

Kevin Smyth
quelle
1

Ich bin schon einmal auf dieses Problem gestoßen. Es war zwar auf einem Windows-Computer, aber wir mussten ssh verwenden, um eine Verbindung zu einem Remote-Host herzustellen. Wir hatten das gleiche Problem, dass die erste Verbindung immer fehlgeschlagen ist, weil die Schlüssel nicht erkannt wurden.

Ich habe es gelöst, indem ich manuell eine Verbindung hergestellt und den Registrierungsschlüssel gefunden und zu Beginn des Skripts importiert habe. Unter Linux sollte es die gleiche allgemeine Idee sein: Sie möchten diesen Server zu einer Liste vertrauenswürdiger Hosts hinzufügen, damit ssh Sie nicht jedes Mal fragt, ob Sie ihm vertrauen.

Wenn Sie die Verbindung manuell hergestellt haben, suchen Sie die Schlüsseldatei und fügen Sie sie Ihrer Datei known_hosts hinzu. Auf diese Weise überprüft ssh diese Datei, setzt voraus, dass Sie wissen, was Sie tun, und fährt fort, ohne Sie nach dem Fingerabdruck zu fragen.

n0pe
quelle