Frage Wie kann ich bestimmten Computern erlauben, in eine Maschine mit deaktivierter Passwortauthentifizierung einzusteigen?


Die Anweisungen in help.ubuntu.com/community/SSH/OpenSSH/Configuring empfehlen, die Passwort-Authentifizierung zu deaktivieren, so dass "nur von speziell autorisierten Computern eine Verbindung hergestellt werden kann". Aber sie sagen nicht, wie man einen Computer ausdrücklich genehmigt. Wie mache ich das?


4
2017-07-05 23:37


Ursprung




Antworten:


Führen Sie für jeden Benutzer, den Sie auf den Server zugreifen möchten, in einem Terminal aus:

ssh-keygen
ssh-copy-id <username>@<serverIPorDNSname>

Es wird Sie fragen, wo Sie es speichern können, die Standardeinstellung ist in Ordnung. Sie werden aufgefordert, eine Passphrase einzugeben. Dies dient dazu, den Schlüssel zu verschlüsseln, nur für den Fall, dass der Computer gestohlen oder kompromittiert wird. Wenn Sie keine Passphrase wünschen, lassen Sie beide Passphrase-Eingabeaufforderungen leer.

Der erste Befehl erstellt einen SSH-Schlüssel für den aktuellen Benutzer, auf dem er ausgeführt wird. Der zweite Befehl ssh geht in den Server und fügt den Schlüssel des aktuellen Benutzers zur Liste des Servers hinzu, der sich anmelden darf. Da ssh-copy-id ssh verwendet, müssen Sie dies tun, bevor Sie die Passwort-Anmeldung deaktivieren.

SSH-Schlüssel sind zwei übereinstimmende Hälften. Die eine Hälfte wird allen erzählt, die andere wird geheim gehalten. Unter Verwendung eines mathematischen Algorithmus kann die öffentliche Hälfte verwendet werden, um mit dem privaten Schlüssel verschlüsselte Daten zu entschlüsseln. Wenn Daten erfolgreich mit dem öffentlichen Schlüssel entschlüsselt werden, wissen Sie zweifelsfrei, dass es die private Hälfte des Schlüssels war, die sie verschlüsselt hat. Wenn Sie sich also mit einem SSH-Schlüssel anmelden, sendet der Client eine Nachricht (verschlüsselt mit dem privaten Schlüssel), die im Grunde "lass mich rein" sagt. Der Server überprüft die Verwendung des öffentlichen Schlüssels und wenn der öffentliche Schlüssel in der Liste der zulässigen Computer ist, ist die Anmeldung erfolgreich.

ssh-copy-id ist (mit ssh) Kopieren der öffentlichen Hälfte in die Server-Liste, welche Schlüssel sich anmelden dürfen (diese Liste wird unter /home/<Benutzername>/.ssh/authorized_keys2 oder im Fall von root bei /root/.ssh/authorized_keys2). Wenn Sie die Kennwortauthentifizierung bereits deaktiviert haben, können Sie dennoch einen Computer hinzufügen. Sie müssen nur den öffentlichen Schlüssel (unter /home/username/.ssh/id_rsa.pub auf einem Client-Computer) auf einen USB-Stick kopieren und dann den Inhalt von id_rsa.pub am Ende von / home / <hinzufügen Benutzername> /. ssh / authorized_keys2 Datei auf dem Server. (Sie können dies tun, indem Sie Befehl wie ausführen cat /media/USB/stick/path/to/id_rsa.pub >>/home/<username>/.ssh/authorized_keys2 auf dem Server.)


7
2017-07-06 00:13



Das ist alles gut, außer dass es nicht garantiert, dass nur der Computer mit dem Schlüssel, den Sie generiert haben, Zugriff hat. Jemand, der böswillig oder schlecht beraten ist, könnte Ihren passwortlosen privaten Schlüssel woanders kopieren und verwenden können. - asoundmove
@asoundmove Das ist nur, wenn sie in Ihren Computer gelangen und Sie keine Passphrase festgelegt haben. - Azendale
+1, ein Beispiel von cat /path/to/id_rsa.pub >>/home/<username>/.ssh/authorized_keys2 könnte gut sein, in der Antwort zu zeigen. - enzotib
Ich habe es getan, indem ich den Anweisungen in linuxproblem.org/art_9.html den öffentlichen RSA-Schlüssel des zu genehmigenden Computers in .ssh / authorized_keys auf dem Computer, auf dem OpenSSH-Server ausgeführt wird, zu setzen, bevor die Kennwortauthentifizierung deaktiviert wird. - Daryl Spitzer
Ich verstehe nicht, warum @enzotib meine Antwort (jetzt im vorherigen Kommentar) als "keine Antwort" gelöscht hat. - Daryl Spitzer


Iptables

Wenn die Computer einen bestimmten IP-Bereich haben, können Sie iptables verwenden, um den Zugriff zu kontrollieren. Iptables sind Teil des Kernels. Sie können sie in der Datei steuern /etc/iptables

# from /etc/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
#
# loopback device
#
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#
# all connections already established (started outgoing from my machine)
#
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# but SSH - restricted
#
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 138.232.0.0/255.255.0.0 -j ACCEPT
#
# block all others (without answering - thus nobody is able to scan the network)
#
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT

Die interessante Zeile ist diese:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 111.111.0.0/255.255.0.0 -j ACCEPT

Prot 22 ist der Standard-SSH-Port. Wenn es bei Ihrer Maschine anders ist, ändern Sie es. 111.111.0.0/255.255.0.0 -j ACCEPT bedeutet, dass es alle Verbindungen von "111.111.foo.bar" akzeptiert, wobei "foo" und "bar" 3 Ziffern sind.


0
2017-07-06 07:32



-1. Mit diesem Ansatz ist es durchaus möglich, Ihre IP-Adresse zu fälschen und unbefugten Zugriff zu erhalten. Dieser Ansatz ist für Authentifizierungszwecke nicht akzeptabel, obwohl er als zusätzliche Verteidigungslinie geeignet sein könnte. Der richtige Ansatz für die Frage des OP besteht darin, die Schlüssel-basierte Authentifizierung zu verwenden, wie in Azendales Antwort. - Scott Severance
@Scott, ja, aber es ist eine gute Ergänzung zu SSH-Schlüsseln, da ssh nicht steuert, welche Computer die Anfragen hervorbringen. Also +1. - asoundmove
@ SCott: Ich habe es auch nie als einzige Verteidigungslinie betrachtet. Ssh hätte immer noch eine eigene Authentifizierungsmethode - con-f-use