In diesem Beitrag werden wir ein Verfahren für den Notfallzugriff auf SSH-Hosts mithilfe von Offline-Sicherheitsschlüsseln entwickeln. Dies ist nur ein Ansatz, den Sie selbst anpassen können. Wir speichern die SSH-Zertifizierungsstelle für unsere Hosts auf einem Hardware-Sicherheitsschlüssel. Dieses Schema funktioniert auf fast jedem OpenSSH, einschließlich SSH mit Single Sign-On.
Warum das alles? Nun, dies ist ein letzter Ausweg. Dies ist eine Hintertür, mit der Sie auf Ihren Server zugreifen können, falls aus irgendeinem Grund nichts anderes hilft.
Warum Zertifikate anstelle von öffentlichen / privaten Schlüsseln für den Notfallzugriff verwenden?
- , . , 1 5 . . .
- «» .
- , .
— , . - PIN-. , — . , , , USB- Yubikey 5. , . , . - .
- OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
- (optional, aber wünschenswert) CLI-Tool zum Überprüfen von Zertifikaten.
Ausbildung
Zunächst müssen Sie eine Zertifizierungsstelle erstellen, die sich auf dem Hardware-Sicherheitsschlüssel befindet. Stecken Sie den Schlüssel ein und führen Sie Folgendes aus:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Als Kommentar (-C) habe ich auf yubikey-9-512-742@smallstep.com verwiesen, damit ich nicht vergesse, zu welchem Sicherheitsschlüssel diese Zertifizierungsstelle gehört.
Neben dem Hinzufügen des Schlüssels zu Yubikey werden zwei Dateien lokal generiert:
- sk-user-ca, ein Schlüsseldeskriptor, der sich auf den im Sicherheitsschlüssel gespeicherten privaten Schlüssel bezieht,
- sk-user-ca.pub, der der öffentliche Schlüssel für Ihre Zertifizierungsstelle ist.
Aber keine Sorge, Yubikey hat einen anderen privaten Schlüssel, der nicht abgerufen werden kann. Daher ist hier alles zuverlässig.
Fügen Sie auf Hosts als Root (falls nicht bereits hinzugefügt) Ihrer SSHD-Konfiguration (/ etc / ssh / sshd_config) Folgendes hinzu:
TrustedUserCAKeys /etc/ssh/ca.pub
Fügen Sie dann auf dem Host den öffentlichen Schlüssel (sk-user-ca.pub) zu /etc/ssh/ca.pub hinzu. Starten Sie
den Daemon neu:
# /etc/init.d/ssh restart
Jetzt können wir versuchen, auf den Host zuzugreifen. Aber zuerst brauchen wir ein Zertifikat. Erstellen Sie ein Schlüsselpaar, das dem Zertifikat zugeordnet werden soll:
$ ssh-keygen -t ecdsa -f emergency
Zertifikate und SSH-Paare
Manchmal ist es verlockend, ein Zertifikat als Ersatz für ein öffentliches / privates Schlüsselpaar zu verwenden. Für die Benutzerauthentifizierung reicht jedoch ein Zertifikat nicht aus. Jedem Zertifikat ist auch ein privater Schlüssel zugeordnet. Aus diesem Grund müssen wir dieses "Notfall" -Schlüsselpaar generieren, bevor wir uns ein Zertifikat ausstellen können. Wichtig ist, dass wir dem Server das signierte Zertifikat anzeigen und das Schlüsselpaar angeben, für das wir einen privaten Schlüssel haben.
Somit ist der Austausch öffentlicher Schlüssel immer noch lebendig und gut. Es funktioniert auch mit Zertifikaten. Mit Zertifikaten muss der Server lediglich keine öffentlichen Schlüssel speichern.
Erstellen Sie als Nächstes das Zertifikat selbst. Ich benötige eine Ubuntu-Benutzerautorisierung im 10-Minuten-Intervall. Sie können es auf Ihre Weise tun.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Sie werden aufgefordert, das Zertifikat mit Ihrem Fingerabdruck zu signieren. Sie können zusätzliche durch Kommas getrennte Benutzernamen hinzufügen, z. B. -n Ubuntu, Carl, Ec2-Benutzer.
Das war's, jetzt haben Sie ein Zertifikat! Als Nächstes müssen Sie die richtigen Berechtigungen angeben:
$ chmod 600 emergency-cert.pub
Danach können Sie sich mit dem Inhalt Ihres Zertifikats vertraut machen:
$ step ssh inspect emergency-cert.pub
So sieht meine aus:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
Hier ist der öffentliche Schlüssel der von uns erstellte Notfallschlüssel, und die Zertifizierungsstelle ist sk-user-ca zugeordnet.
Wir sind endlich bereit, den SSH-Befehl auszuführen:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Sie können jetzt Zertifikate für jeden Benutzer auf dem Host erstellen, der Ihrer Zertifizierungsstelle vertraut.
- Sie können Notfall entfernen. Sie können sk-user-ca behalten, aber das brauchen Sie nicht, da es sich auch auf dem Sicherheitsschlüssel befindet. Möglicherweise möchten Sie auch den ursprünglichen öffentlichen PEM-Schlüssel von Ihren Hosts entfernen (z. B. in ~ / .ssh / authorized_keys für den Ubuntu-Benutzer), wenn Sie ihn für den Notfallzugriff verwendet haben.
Notfallzugang: Aktionsplan
Geben Sie den Sicherheitsschlüssel ein und führen Sie den folgenden Befehl aus:
$ ssh-add -K
Dadurch werden dem SSH-Agenten der öffentliche Schlüssel und der Schlüsseldeskriptor der Zertifizierungsstelle hinzugefügt.
Exportieren Sie nun den öffentlichen Schlüssel, um das Zertifikat zu erstellen:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Erstellen Sie ein Zertifikat mit einem Ablaufdatum von beispielsweise nicht mehr als einer Stunde:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
Und jetzt wieder SSH:
$ ssh -i emergency username@host
Wenn Ihre .ssh / config-Datei Verbindungsprobleme verursacht, können Sie ssh mit der Option -F none ausführen, um darauf zu verzichten. Wenn Sie ein Zertifikat an einen Kollegen senden müssen, ist Magic Wormhole die einfachste und sicherste Option . Dies erfordert nur zwei Dateien - in unserem Fall sind dies Emergency und Emergency-Cert.pub.
Was ich an diesem Ansatz liebe, ist die Hardware-Unterstützung. Sie können die Sicherheitsschlüssel in den Safe legen und sie werden nirgendwo hingehen.
Werbung
Epic Server sind billige VPS mit leistungsstarken Prozessoren von AMD, CPU-Kernfrequenz bis 3,4 GHz. Mit der maximalen Konfiguration können Sie fast jedes Problem lösen - 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe. Begleiten Sie uns!