it-swarm.com.de

Nicht interaktiver Git-Klon (SSH-Fingerabdruck-Eingabeaufforderung)

Ich möchte ein Repo nicht interaktiv klonen. Beim Klonen fordert git auf, den Fingerabdruck des Hosts zu bestätigen:

The authenticity of Host 'bitbucket.org (207.223.240.182)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? no

Wie erzwinge ich jedes Mal "Ja", wenn diese Frage auftaucht? Ich habe versucht, yes yes | git clone ..., aber es funktioniert nicht.

BEARBEITEN: Hier ist eine Lösung: Kann ich bekannten_Hosts automatisch einen neuen Host hinzufügen? (fügt bekannten_Hosts mit ssh-keyscan Entires hinzu).

143
qwe

Weder die Optionen "StrictHostKeyChecking no" noch "ssh-keyscan" sind sicher. Sie brauchen eine manuelle Überprüfung des Fingerabdrucks, um einen MiTM-Angriff zu vermeiden, wenn Sie bei ssh bleiben.

Eigentlich haben Sie 2 Möglichkeiten:

Verwenden Sie das https-Protokoll anstelle von git

Sie werden nicht nach einem Fingerabdruck gefragt, da ssh nicht beteiligt ist und stattdessen https verwendet wird. Aus Sicherheitsgründen vertrauen Sie den auf Ihrem Betriebssystem installierten Stammzertifikaten. Wenn Sie ein minimalistisches Image oder Docker verwenden, müssen Sie möglicherweise das Paket ca-certificates installieren.

Wenn Sie wirklich git + ssh Protokoll wollen

Müssen Sie den Schlüssel wirklich zur Laufzeit hinzufügen? Dies ist nicht sicher, da Sie den Fingerabdruck nicht überprüft haben und somit für MiTM-Angriffe offen sind. Dies ist nicht nur theoretisch und hat sich bewährt.

Bevor Sie Ihr Skript ausführen, rufen Sie den Schlüssel von github (auf Ihrem lokalen Computer) ab:

ssh-keyscan github.com >> githubKey

Generieren Sie den Fingerabdruck:

ssh-keygen -lf githubKey

Und überprüfe es manuell gegen die aufgelisteten auf dieser Seite (ok, da vertraust du https-Zertifikate und OpenSSL, um Ihnen die ursprüngliche Github-Website zu bringen, aber es ist immer noch viel besser, als blind einen öffentlichen Schlüssel zu akzeptieren.

Dann codieren Sie es in Ihrem Skript fest, indem Sie es hinzufügen:

echo '<copy paste the content of 'cat githubKey' on your machine>'  >> ~/.ssh/known_hosts

vor dem Git-Klon.

Der öffentliche GitHub-Schlüssel ändert sich nur, wenn er der Meinung ist, dass er kompromittiert wurde (oder nicht sicher genug ist). Wenn dies jemals der Fall ist, können Sie wollen Ihr Skript trotzdem fehlschlagen.

120
autra

Ich denke nicht, dass dies die beste Lösung ist, aber es war eine Lösung für mich.

ANTWORTEN:

Hinzufügen der Domainnamen zum known_hosts Datei mit dem ssh-keyscan Befehl löste das Problem:

ssh-keyscan <enter_domainname_e.g._github.com> >> ~/.ssh/known_hosts

115
kroe

Ich glaube, eine bessere Option ist es, Ihre ~/.ssh/known_hosts - Datei zu sichern und zu leeren, die SSH-Verbindung manuell durchzuführen, die IP-Adresse und den Fingerabdruck mv ~/.ssh/known_hosts ~/bitbucket_hosts Zu überprüfen und dann den Inhalt von ~/bitbucket_hosts in Ihrem Skript, um die bekannten Fingerabdrücke automatisch an die Datei unknown_hosts anzuhängen (vergessen Sie nicht, das Original ~/.ssh/known_hosts wiederherzustellen).

Dieser Schritt muss nur einmal ausgeführt werden (auf jedem Computer, glaube ich), und sobald Sie die Fingerabdrücke haben, können Sie ihn in Ihr Automatisierungsskript integrieren.

9
Steven Soroka

Ich verstehe zwar, dass Sie einen solchen Prozess automatisieren möchten, dies wäre jedoch nicht ratsam. Der Grund, warum SSH und verwandte Netzwerk-Unterkomponenten bei der Verwendung eines sicheren Protokolls nicht funktionieren, besteht darin, einen Menschen zu warnen, dass der öffentliche Schlüssel eines Systems unbekannt ist. Dies ist beabsichtigt - der Benutzer muss das System explizit informieren, von dem der Host erwartet wird. Sie möchten nicht automatisch jeden öffentlichen Schlüssel akzeptieren, der Ihnen angezeigt wird, oder ein Teil der Sicherheit in SSH oder TLS/SSL könnte gefährdet sein. Ein Beispiel ist ein Man-in-the-Middle-Angriff, beispielsweise wenn eine Proxy-Software anstelle eines erwarteten Hosts ihren eigenen Schlüssel präsentiert.

Mit Vorsicht fortfahren.

Wenn Sie keine Angst vor der Quelle des Codes auf der anderen Seite des Kabels haben, sollten Sie beim Klonen explizit und ausschließlich das Protokoll git: // verwenden - es ist authentifizierungslos und im Klartext.

7
Jeff Stice-Hall

Hinzufügen des Schlüssels zu .ssh/known_hosts scheint das Richtige zu sein.

Wenn Sie die Aufgabe automatisieren, möchten Sie jedoch sicherstellen, dass der Schlüssel nicht bereits in jeder clone/pull Aufgabe enthalten und hinzugefügt ist.

Dieses Snippet fügt den Fingerabdruck nur hinzu, wenn er nicht bereits gefunden wurde:

if [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ]; then ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; fi
7
udondan

Wie Jeff Hall sagte, ist dies gefährlich, da es unentdeckte Man-in-the-Middle-Angriffe ermöglicht. Sie können jedoch das StrictHostKeyChecking no option in ssh, um die Überprüfung der Host-Schlüssel zu deaktivieren. Ich wäre jedoch sehr vorsichtig mit dieser Option, wenn ich Sie wäre.

6
Wren T.