Wir haben Bastion Server B. Wir müssen SSH von A über B nach C mit privatem Schlüssel.
Was ist die bessere Option:
Legen Sie den privaten SSH-Schlüssel auf Server B. Wir haben gelesen, dass es eine schlechte Idee ist, dies in einer Produktionsumgebung zu tun.
Von hier aus :
Platzieren Sie niemals Ihre privaten SSH-Schlüssel auf der Bastion-Instanz. Verwenden Sie stattdessen die SSH-Agentenweiterleitung, um zuerst eine Verbindung zur Bastion und von dort zu anderen Instanzen in privaten Subnetzen herzustellen. Auf diese Weise können Sie Ihren privaten SSH-Schlüssel nur auf Ihrem Computer behalten.
Verwenden Sie die SSH-Agentenweiterleitung . Zum Einrichten der Agentenweiterleitung muss die TCP-Weiterleitung zugelassen werden. Beim Einrichten der Agentenweiterleitung wird auf dem Weiterleitungshost eine Socket-Datei erstellt. Dies ist der Mechanismus, mit dem der Schlüssel an das Ziel weitergeleitet werden kann. In den Bastion-Einstellungen bei AWS:
TCP-Weiterleitung: Wenn Sie diesen Wert auf true setzen, wird die TCP-Weiterleitung (SSH-Tunneling) aktiviert. Dies kann sehr nützlich sein, stellt jedoch auch ein Sicherheitsrisiko dar. Wir empfehlen daher, die Standardeinstellung (deaktiviert) beizubehalten, sofern dies nicht erforderlich ist
Auch von hier :
SSH Agent Forwarding gilt als schädlich
Was ist besser? Was ist mit der Alternative aus dem zweiten Link: ProxyCommand , ich verstehe, dass es beim Problem mit der Socket-Datei hilft, aber ich denke immer noch, dass ich die TCP-Weiterleitung aktivieren muss. Ist es also sicher genug?
ssh hostb
Befehl eingeben, damit Hostb in der lokalen Konfiguration nachgeschlagen werden kann und weiß, dass eine Verbindung über Hosta hergestellt werden muss. Es könnte das nicht tun, wenn Sie die Konfiguration auf Hosta setzen ...Antworten:
Verwenden Sie ProxyCommand oder ProxyJump
Ich würde empfehlen, zu verwenden
ProxyCommand
(oder noch besser,ProxyJump
da die Syntax einfacher ist, aber OpenSh 7.3+ erfordert, denke ich auf der Clientseite), und Sie müssen keinen privaten Schlüssel auf der Bastion bereitstellen, alles bleibt lokal.Beispiel mit ProxyJump
Auf Ihrem Client-Computer schreiben Sie eine Datei
~/.ssh/config
mit einem ähnlichen Inhalt wie unten:Wenn Sie dies tun,
ssh srvC
werden Sie über B (Bastion) mit C verbunden, ohne dass der Agent weitergeleitet oder der private Schlüssel für die Bastion bereitgestellt wird.Im obigen Beispiel ist "bastion" ein Alias für Ihren Bastion-Host und srvC ein Alias für Ihren Server C. In müssen
HostName
Sie entweder IPs oder einen echten vollqualifizierten Domainnamen für Ihre Hosts eingeben . Für die Benutzer müssen Sie denUser
für den richtigen Anmeldenamen auf der Bastion und dem Server C aktualisierten Namen aktualisieren . SchließlichIdentityFile
ist dies optional, wenn Sie einen lokalen Agenten (z. B. KeeAgent oder ssh-agent) verwenden, dieser jedoch nicht ausgeführt wird arbeiten und fragen Sie nach jeder Schlüsselpassphrase.Bereitstellen der öffentlichen Schlüssel
Natürlich müssen Sie die öffentlichen Schlüssel sowohl für Bastion als auch für srvC bereitstellen. Sie können Folgendes verwenden (das $ -Zeichen dient nur zur Veranschaulichung der Eingabeaufforderung, geben Sie es nicht ein):
Hinweis: Die oben genannten Funktionen funktionieren nur, wenn die Kennwortauthentifizierung weiterhin zulässig ist. Nach der obigen Bereitstellung und der Überprüfung, ob alles wie beabsichtigt funktioniert, sollten Sie die Kennwortauthentifizierung auf den beiden Servern nicht zulassen.
Beispiel mit ProxyCommand anstelle von ProxyJump
Wenn Sie eine ältere Version von OpenSSH haben, die
ProxyJump
(auf der Clientseite) nicht unterstützt , ersetzen Sie:durch
Soweit ich verstanden habe, ist dies ähnlich.
quelle
Ich habe die Antwort zu ProxyJump gesehen. Lassen Sie uns über ProxyCommand sprechen .
Aber warte, warte! Ich kann Ihnen schreiben, wie Sie den Server hacken, der die Agentenweiterleitung verwendet. Das wäre viel einfacher, den Unterschied zu verstehen!
Lass uns hacken!
Für die grundlegenden Schritte: Sie können meinen Beitrag hier lesen
Grundlegende Schritte sind die folgenden:
Verwendung von AgentForwarding
-Erstellen Sie die Konfiguration in ~ / .ssh / config
- Fügen Sie Ihren Authentifizierungsschlüssel zu ssh-agent hinzu
-Verbinden Sie sich mit Bastion Hos
- Verbinden Sie den Anwendungsserver mit der Bastion
Hacken!
Sie können mir die Frage stellen:
Ist mein Server sicher? Und die Antwort ist ganz einfach:
Warum?
Und wo ist das Problem?
Warum?
Wie kann man Server hacken, wenn man den Bastion-Host kompromittiert hat?
Ziel verfolgen
Im Verzeichnis / tmp sehen Sie möglicherweise Folgendes:
Öffnen wir die temporäre Datei
Sehen wir uns die Verbindungen zu dieser Prozess-ID an.
Ergebnis:
und wer ist verbunden?
Ergebnis:
Wir können auch Socket-Dateien sehen:
Ergebnis:
Und was passiert, wenn der Client mit dem Remote-Server verbunden wird? Mal sehen:
Wir können sogar sehen, ob eine Socket-Datei mit netstat verwendet wird:
Stehlen Sie Socket-Informationen und IP-Adresse
Jetzt müssen wir die Socket-Informationen stehlen, während die Sitzung des Bastion-Hosts geöffnet ist . Oh, wir brauchen auch die IP des Zielservers , also benutze einfach netstat:
Der letzte Schritt zur Verwendung der weitergeleiteten Socket-Datei
Überprüfen Sie, ob der Schlüssel geladen ist .
führen sollte etwas sein , wie das :
Server ist gehackt, wie kann man das Sicherheitsproblem beheben?
Proxy-Befehl
Für grundlegende Operationen: Wie man Dateien über die Server überträgt (von Client zu Server, Server zu Client), können Sie in meinem Beitrag hier lesen
Fazit
Weitere Informationen finden Sie in meinem Blog . Zusätzlich habe ich einige Screeenshots, so dass es für Sie hilfreich sein kann.
quelle
channel 0: open failed: administratively prohibited: open failed. stdio forwarding failed.
. Hast du eine Idee warum? Im sicheren Protokoll sehe ich:refused local port forward: originator 127.0.0.1 port 65535, target *app-ip* port 22
Verwenden Sie einfach die SSH-Agentenweiterleitung wie die meisten anderen.
Vorteil: In der Bastion sind keine Schlüssel gespeichert, die missbraucht werden können.
Ich hoffe, das hilft :)
quelle