ssh: Schlüssel automatisch akzeptieren

168

Ich habe dieses kleine Dienstprogramm geschrieben:

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

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

beendet
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 yes versucht:

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

ohne Glück.

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

    
Adam Matan 18.04.2012, 11:11
quelle

4 Antworten

180

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 Host-Schlü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önnten Sie dies mit der Option -oUserKnownHostsFile=/dev/null weniger sicher (aber bequemer für häufig wechselnde Hostschlüssel) machen. 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.
    
Lekensteyn 18.04.2012, 11:29
quelle
96

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

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

HINWEIS: Ersetzen Sie & lt; IP-Adresse & gt; und & lt; Hostname & gt; mit dem IP- und DNS-Namen des Servers, den Sie hinzufügen möchten.

Das einzige Problem dabei ist, dass Sie zwei 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>

Sie könnten also Folgendes ausführen:

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 sie erneut hinzuzufügen, entfernen Sie im Wesentlichen die Sicherheit, den Fingerabdruck zu verifizieren. Daher sollten Sie dieses Skript vor jeder Ausführung Ihres Dienstprogramm-Skripts definitiv nicht ausführen.

    
mhost 17.10.2013 02:24
quelle
23

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

Das Deaktivieren der Plausibilitätsprüfung aus Bequemlichkeitsgründen klingt wie ein schlechter Plan, selbst wenn Sie denken, dass Sie die Umgebung vollständig unter Kontrolle haben.

    
tink 24.11.2014 20:47
quelle
0

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

Server IP in Dateiserver-Liste hinzufügen

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.

Der Befehl

Below fügt alle Server aus der Liste hinzu.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
Waqas Khan 16.02.2018 08:46
quelle

Tags und Links