Frage ssh: Akzeptiert automatisch Schlüssel


Ich habe dieses kleine Hilfsskript geschrieben:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Wenn ein neuer Server hinzugefügt wird $SERVER_LIST, das Skript wird gestoppt mit:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

ich habe es versucht yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

ohne Glück.

Gibt es eine Möglichkeit zu parametrisieren? ssh um jeden neuen Schlüssel automatisch zu akzeptieren?


171
2018-04-18 09:11


Ursprung


Lekensteyns Antwort ist exzellent und korrekt, aber ich wollte das nur notieren, da ssh "ja" erwartet und yes Ausgänge "y", mit denen Sie vielleicht mehr Glück hatten for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done (Beachten Sie das zusätzliche Ja, das ja sagt, was Sie anstelle von "y" sagen sollen). - chazomaticus


Antworten:


Verwenden Sie die Option StrictHostKeyChecking, zum Beispiel:

ssh -oStrictHostKeyChecking=no $h uptime

Diese Option kann auch zu ~ / .ssh / config hinzugefügt werden, z. B .:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Beachten Sie, dass bei einer Änderung der Hostschlüssel auch bei dieser Option eine Warnung angezeigt wird:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Wenn Ihre Hosts nicht oft neu installiert werden, können Sie dies mit der weniger sicher (aber bequemer für häufig wechselnde Host-Schlüssel) machen -oUserKnownHostsFile=/dev/null Möglichkeit. Dadurch werden alle empfangenen Hostschlüssel verworfen, sodass die Warnung nie generiert wird.


Mit 18.04 gibt es eine neue Möglichkeit: StrictHostKeyChecking=accept-new. Von man 5 ssh_config:

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

185
2018-04-18 09:29



Dies ist nicht die beste Lösung, da integrierte Sicherheitstools umgangen werden. ssh-keyscan ist vorzuziehen, wenn es auf Ihrem System verfügbar ist. - Stefan Lasiewski
@StefanLasiewski Es ermöglicht Man in der Mitte Angriffe, wenn Sie in nicht vertrauenswürdigen Netzwerken sind. Um neue Schlüssel zu festen Hosts zu akzeptieren, muss der ssh-keyscan Ansatz ist vernünftiger. Für lokale virtuelle Maschinen und andere Hosts in vertrauenswürdigen Netzwerken mit dynamischen / wiederverwendeten IP-Adressen ist der beschriebene Ansatz gut genug. - Lekensteyn
Nur um den Unterschied zwischen den beiden Lösungen zu verdeutlichen: Die ssh-keyscan Die Lösung ist nur für einen Man-in-the-Middle-Angriff anfällig ssh-keyscan wird ausgeführt. Das -oStrictHostKeyChecking=no Lösung ist jedes Mal anfällig für einen Man-in-the-Middle-Angriff sshwird ausgeführt. - Erik Sjölund


Sie können den folgenden Befehl verwenden, um Ihren known_hosts den Fingerabdruck für einen Server hinzuzufügen

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

HINWEIS: Ersetzen Sie <IP-Adresse> und <Hostname> durch den IP- und DNS-Namen des Servers, den Sie hinzufügen möchten.

Das einzige Problem dabei ist, dass Sie einige Server in Ihren known_hosts zweimal haben. Es ist nicht wirklich eine große Sache, nur zu erwähnen. Um sicherzustellen, dass keine Duplikate vorhanden sind, können Sie zuerst alle Server entfernen, indem Sie zuerst Folgendes ausführen:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

So könntest du laufen:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Eine Sache, die Sie beachten sollten, wenn Sie entfernen, nur um neu hinzuzufügen, entfernen Sie im Wesentlichen die Sicherheit der Überprüfung des Fingerabdrucks. Sie sollten dieses Skript also nicht vor jeder Ausführung Ihres Hilfsskriptes ausführen.


96
2017-10-17 00:24



führe es durch Sortierung | uniq und dann die Suche nach Duplikat Host mit awk nach würde das Skript in der Lage, veränderte Hosts zu erkennen und warnen Benutzer nur über diese, da der gleiche Host mit verschiedenen Schlüsseln Ärger bedeuten könnte - Lennart Rolland
Vielleicht möchten Sie eine Notiz hinzufügen, die -H Hasht Hostnamen und Adressen. - David Cullen


Ich bin ein bisschen spät mit dieser Antwort, aber die vernünftige Art wäre, einen ssh-keyscan auf der neuen Maschine zu machen, bevor Sie die Betriebszeitversammlung laufen lassen.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Die Deaktivierung des Plausibilitätschecks aus Bequemlichkeitsgründen klingt wie ein schlechter Plan, selbst wenn Sie denken, dass Sie die Umgebung vollständig unter Kontrolle haben.


23
2017-11-24 19:47



Das ist genau das was ich gesucht habe. Vielen Dank. - user156516
Wenn Sie den oben genannten Befehl ausführen und die Host-Schlüssel nicht auf Fingerabdrücke prüfen, die Sie außerhalb der Bandbreite erworben haben, ist dies genauso verwundbar wie StrictHostKeyChecking no - code_monk
@code_monk: Nein, ist es nicht. Ich öffne ein einmalig Möglichkeit zum Fehlschlagen (Annahme eines Schlüssels von einem falschen Host, der zu bekannten Hosts hinzugefügt werden soll). StrictHostKeyChecking Nr ermöglicht Wiederholungen für andere Maschinen. - tink


Um eine Liste von Servern automatisch hinzuzufügen, können wir folgendes tun:

Fügen Sie die Server-IP in die Dateiserver-Liste hinzu

Die IPs sollten im unteren Format hinzugefügt werden.

Ausgabe von cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Ändern Sie über IPs, indem Sie Ihre ersetzen.

Unter Befehl fügt alle Server aus der Liste hinzu.

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts

0
2018-02-16 07:46