ssh-keyscan - wird immer noch mit beworben. Die Authentizität des Hosts '[Hostname] ([IP-Adresse])' kann nicht hergestellt werden

9

Ich schreibe ein Skript für ein Remote-Rsync-Setup und muss der lokalen Datei "unknown_hosts" einen Remote-Server hinzufügen, um zu vermeiden, dass Sie beim ersten Ausführen des Skripts wie folgt aufgefordert werden:

Die Authentizität des Hosts '[Hostname] ([IP-Adresse])' kann nicht festgestellt werden. Der RSA-Schlüsselfingerabdruck ist [Schlüsselfingerabdruck]. Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja / Nein)?

Gemäß kann ich einen neuen Wirt zu known_hosts automatisch hinzufügen? Ich habe versucht (mit einer neuen Datei "unknown_hosts"):

ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts

Dies funktioniert jedoch nicht. Ich werde immer aufgefordert, den Fingerabdruck zu akzeptieren.

Wenn ich ssh dies für mich hinzufügen lasse, ist der Schlüssel-Hash in der Datei know_hosts sehr unterschiedlich.

Was kann ich noch tun, um dieses Problem zu beheben?

morleyc
quelle

Antworten:

6

Versuche dies:

ssh-keyscan -t rsa [ip_address]

Nehmen Sie die Ausgabe und fügen Sie sie in .ssh / unknown_hosts ein. Wenn Sie nun know_hosts hashen möchten, gehen Sie folgendermaßen vor:

ssh-keygen -H

edit: Hier ist die One-Command-Lösung. Es verwendet Hostnamen und IP-Adressen und hasht beide.

ssh-keyscan -Ht rsa [hostname],[IP address] >> known_hosts
kschurig
quelle
4

Die Antwort von kschurig wird funktionieren, ist aber nicht unbedingt die sicherste. Sie erhalten Bonuspunkte, wenn Sie die Extrameile gehen, damit Sie den Server anhand von mehr als einer URI identifizieren können - dh Hostname und IP-Adresse. Das heißt, Sie können weiterhin gültige URIs dieses Hosts hinzufügen, indem Sie die durch Kommas getrennte Liste erweitern.

Ich suchte jedoch nach einer alltäglichen Möglichkeit, die unbekannte manuelle Host-Interaktion des Klonens eines Git-Repos wie unten gezeigt zu umgehen, und sie sollte helfen, zu erklären, was passiert und wie Sie diesen einen Teil der Skripterstellung für SSH vermeiden können:

brad@computer:~$ git clone [email protected]:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' 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)?

Beachten Sie den Fingerabdruck des RSA-Schlüssels ...

Also, das ist eine SSH-Sache, das wird für Git über SSH funktionieren und nur für SSH-bezogene Dinge im Allgemeinen ...

brad@computer:~$ nmap bitbucket.org --script ssh-hostkey

Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey:
|   1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_  2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds

Installieren Sie zunächst nmap auf Ihrem täglichen Treiber. nmap ist sehr hilfreich für bestimmte Dinge, wie das Erkennen offener Ports und das manuelle Überprüfen von SSH-Fingerabdrücken. Aber zurück zu dem, was wir tun.

Gut. Entweder bin ich an den verschiedenen Stellen und Maschinen, an denen ich es überprüft habe, kompromittiert - oder die plausibelere Erklärung dafür, dass alles gut gelaunt ist, ist das, was passiert.

Dieser 'Fingerabdruck' ist nur eine Zeichenfolge, die mit einem Einwegalgorithmus für unsere menschliche Bequemlichkeit verkürzt wurde, wobei das Risiko besteht, dass mehr als eine Zeichenfolge in denselben Fingerabdruck aufgelöst wird. Es kommt vor, sie werden Kollisionen genannt.

Unabhängig davon, zurück zur ursprünglichen Zeichenfolge, die wir im folgenden Kontext sehen können.

brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg

Wir haben also im Voraus die Möglichkeit, vom ursprünglichen Host eine Form der Identifizierung anzufordern.

Zu diesem Zeitpunkt sind wir manuell genauso anfällig wie automatisch - die Zeichenfolgen stimmen überein, wir haben die Basisdaten, die den Fingerabdruck erstellen, und wir könnten in Zukunft nach diesen Basisdaten fragen (um Kollisionen zu verhindern).

Verwenden Sie diese Zeichenfolge jetzt so, dass Sie nicht nach der Authentizität eines Hosts gefragt werden müssen ...

Die Datei unknown_hosts verwendet in diesem Fall keine Klartexteinträge. Sie werden gehashte Einträge kennen, wenn Sie sie sehen. Sie sehen aus wie Hashes mit zufälligen Zeichen anstelle von xyz.com oder 123.45.67.89.

brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

Die erste Kommentarzeile wird ärgerlich angezeigt - aber Sie können sie mit einer einfachen Weiterleitung über die Konvention ">" oder ">>" entfernen.

Da ich mein Bestes getan habe, um unbefleckte Daten zu erhalten, die zur Identifizierung eines "Hosts" und eines Vertrauens verwendet werden können, füge ich diese Identifikation meiner Datei "unknown_hosts" in meinem Verzeichnis ~ / .ssh hinzu. Da es jetzt als bekannter Gastgeber identifiziert wird, werde ich die oben erwähnte Aufforderung nicht erhalten, als Sie ein Jugendlicher waren.

Danke, dass du bei mir bleibst, los geht's. Ich füge den Bitbucket-RSA-Schlüssel hinzu, damit ich dort im Rahmen eines CI-Workflows auf nicht interaktive Weise mit meinen Git-Repositorys interagieren kann, aber was auch immer Sie tun, was Sie wollen.

#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

So bleibst du heute Jungfrau. Sie können dasselbe mit Github tun, indem Sie in Ihrer Freizeit ähnlichen Anweisungen folgen.

Ich habe so viele Stapelüberlaufpfosten gesehen, die Ihnen sagten, Sie sollten den Schlüssel programmgesteuert blind hinzufügen, ohne ihn zu überprüfen. Je mehr Sie den Schlüssel von verschiedenen Computern in verschiedenen Netzwerken überprüfen, desto mehr Vertrauen können Sie darauf haben, dass der Host derjenige ist, von dem er sagt, dass er es ist - und das ist das Beste, was Sie von dieser Sicherheitsebene hoffen können.

FALSCH ssh -oStrictHostKeyChecking = kein Hostname [Befehl]

FALSCH ssh-keyscan -t rsa -H Hostname >> ~ / .ssh / unknown_hosts

Tun Sie bitte keines der oben genannten Dinge. Sie haben die Möglichkeit, Ihre Chancen zu erhöhen, zu vermeiden, dass jemand Ihre Datenübertragungen über einen Mann im mittleren Angriff belauscht - nutzen Sie diese Gelegenheit. Der Unterschied besteht darin, buchstäblich zu überprüfen, ob der RSA-Schlüssel, den Sie haben, der des echten Servers ist, und jetzt wissen Sie, wie Sie diese Informationen zum Vergleichen erhalten, damit Sie der Verbindung vertrauen können. Denken Sie daran, dass mehr Vergleiche von verschiedenen Computern und Netzwerken normalerweise Ihre Fähigkeit verbessern, der Verbindung zu vertrauen.

BradChesney79
quelle