Blog
Verwenden Sie einen SSH-Schlüssel für den Zugriff auf Ihre Cloud-Ressourcen mit socks-proxy

Bei der Erstellung von Rechnern und Diensten in der Cloud können wir die Authentifizierungsmethode für SSH festlegen. Wir können uns mit einem Passwort oder mit einem öffentlichen Schlüssel authentifizieren. In der Regel greifen Sie auf Ihre Linux-Rechner über eine SSH-Verbindung mit dem Public-Key-Mechanismus zu, da dies sicherer und bequemer ist.
Sie sollten nicht einen einzigen Schlüssel für alle Ihre SSH-Verbindungen verwenden. Eine gute Praxis ist es, für jeden "Kontext" einen neuen Schlüssel zu erstellen. Zum Beispiel einen neuen Schlüssel für verschiedene Clients und Umgebungen.
Richten Sie eine einfache Passphrase ein, um Ihren privaten Schlüssel zu verschlüsseln. Wenn Ihr privater Schlüssel gestohlen/geleakt wird, ist das keine direkte Bedrohung für den Zugriff auf Ihre Ressourcen: man braucht auch Ihre Passphrase. ssh-agent kann sich diese Passphrase merken, so dass Sie das Passwort nicht bei jeder Verbindung eingeben müssen.
--- 2018 December update ---
Vor ein paar Wochen entdeckte ich die Chrome-Browserprofile und gewann neue Erkenntnisse über die Verwendung von Socken-Proxies. Ich verwende diese Profile täglich und das macht mein Leben besser. Bei der Aktualisierung dieses Blogs erwähnte ein Kollege PAC, das ich ebenfalls einbeziehen wollte. In der vorherigen Version des Blogs habe ich erklärt, wie man es mit einem separaten Browser und einem zusätzlichen Plugin verwendet. Diese zusätzlichen Komponenten werden jetzt nicht mehr benötigt:
Verbindung über einen Socks-Proxy ohne Plugins
Anstatt einen separaten Browser wie z.B. Firefox mit einem Proxy-Plugin zu verwenden, können Sie ein Profil verwenden und direkt mit der Proxy-Sitzung beginnen. Die Proxy-Einstellungen werden in einem separaten Profil gespeichert, das Sie wiederverwenden oder Variationen für verschiedene Umgebungen erstellen können. Ihr Standard-Browserprofil bleibt davon unberührt, d.h. Sie können mit Ihrem Browser weiter im Internet surfen, wie Sie es gewohnt sind.
# MacOS: "/Programme/Google Chrome.app/Inhalt/MacOS/Google Chrome" --user-data-dir="$HOME/chrome-proxy-profile" --proxy-server="socks5://localhost:1337"
In diesem Beispiel wird ein neues Profil unter chrome-proxy-profile erstellt und der Sock-Proxy wird mit dem lokalen Port 1337 verbunden. Dieses separate Profil enthält nichts von Ihrem normalen Profil, so dass zusätzliche Erweiterungen (Popup-Blocker, Passwortmanager usw.) und Lesezeichen nicht verfügbar sind.
Ich würde dies als schnelle und schmutzige Lösung vorschlagen, wenn Sie keine Lust haben, etwas zu konfigurieren.
Für andere Betriebssysteme prüfen Sie den Link GCP-Verbindungssicherheit.
Proxy mit PAC konfigurieren
Bei der vorherigen Einrichtung werden alle Verbindungen und Websites, die Sie innerhalb dieses Browserprofils öffnen, über den Proxy geleitet. Wenn Sie also www.xebia.com öffnen, wird dieser gesamte Datenverkehr auf dem entfernten Rechner ausgeführt und an Sie weitergeleitet. Sie können einige Domänen auf eine Whitelist setzen, damit sie den Proxy nicht verwenden, aber das ist nicht ideal. Einige Proxy-Plugins können auf der Grundlage der Domäne automatisch umschalten: Foxy Proxy für Firefox oder Proxy SwitchyOmega für Chrome.
Ein alternativer Ansatz ist die Konfiguration einer systemweiten automatischen Proxy-Konfiguration mit PAC. Auf diese Weise können Sie Ihr normales Browserprofil (mit Ihren bevorzugten Add-ons, Erweiterungen und Lesezeichen) verwenden und den Socks-Proxy nutzen. Eine Win-Win-Situation!
Proxy-Auto-Config ist eine kleine Javascript-Datei, die Proxys auf der Grundlage der URL (Domain) umschaltet. Damit können Sie den Socks-Proxy für bestimmte Domänen automatisch aktivieren. Dieser Ansatz ist am effektivsten, wenn Sie mehrere Rechner haben, die Teil einer Domäne sind, zum Beispiel *.cloud.myclient.nl. Sie können die PAC-Datei lokal speichern und referenzieren (~/autoproxy_custom.pac):
Funktion FindProxyForURL(url, Gastgeber) { wenn (dnsDomainIs(Gastgeber, "client_x_dev")) { return "SOCKS5 localhost:1337"; } sonst { return "DIREKT"; } }
- Wählen Sie auf Ihrem Mac das Menü Apple > Systemeinstellungen und klicken Sie dann auf Netzwerk.
- Wählen Sie in der Liste den von Ihnen verwendeten Netzwerkdienst aus - zum Beispiel Ethernet oder Wi-Fi.
- Klicken Sie auf Erweitert und dann auf Proxies.
- Wählen Sie Automatische Proxy-Konfiguration. Geben Sie die Adresse der PAC-Datei in das Feld URL ein:
file://~/autoproxy_custom.pac - Optional können Sie auch Domains umgehen:
*apple.com
Firefox verwendet standardmäßig die Systemeinstellungen, aber Sie können den PAC-Proxy speziell in den Einstellungen der Netzwerkkonfiguration konfigurieren.
--- end of update ---
SSH-Schlüsselpaar generieren
Lassen Sie uns ein neues ssh-Schlüsselpaar mit einem bestimmten Namen erstellen:
# Ihr Rechner, wenn der Ordner .ssh in Ihrem Home nicht existiert, erstellen Sie ihn mit Zugriffsrecht 700 ssh-keygen -f ~/.ssh/client_x_cloud_development Erzeugen eines öffentlichen/privaten RSA-Schlüsselpaars. Passphrase eingeben (leer für keine Passphrase): Geben Sie dieselbe Passphrase erneut ein: Ihre Kennung wurde in /Users/abij/.ssh/client_x_cloud_development gespeichert. Ihr öffentlicher Schlüssel wurde in /Users/abij/.ssh/client_x_cloud_development.pub gespeichert. Der wichtigste Fingerabdruck ist: SHA256:LTEV93R8l9ScJyBMwyj5sMVjVK+G/vzJfOR+CJhgRaM
Es wurden zwei Dateien erstellt:
- client_x_cloud_development: der private Schlüssel
- client_x_cloud_development.pub: der öffentliche Schlüssel endet mit .pub
Geben Sie Ihren privaten Schlüssel niemals weiter, er wird nicht ohne Grund mit der Berechtigung 600 gespeichert!
Bei der Erstellung von Linux-Maschinen können Sie Ihren öffentlichen Schlüssel zur Authentifizierung und Anmeldung angeben. Hier ist ein Beispiel, wie Sie eine VM-Instanz in GoogleCloudPlatform mit dem öffentlichen ssh-Schlüssel erstellen:
Starten Sie nun den Rechner und warten Sie eine Weile, bis der Rechner verfügbar ist. Um eine Verbindung mit dem Rechner herzustellen, müssen wir seine öffentliche/externe IP-Adresse abfragen. Wie Sie unten für diese VM sehen können, lautet sie 104.155.45.71 mit dem Hostnamen my-cool-node.
Verbinden Sie sich per SSH mit dem Rechner und installieren Sie einen Webserver, um die Portweiterleitung zu demonstrieren.
# auf Ihrem Rechner, ausführlicher Verbindungsstring: ssh -i ~/.ssh/client_x_cloud_development abij@104.155.45.71abij@my-cool-node:~# # auf dem entfernten Rechner einen Webserver installieren sudo apt-get install -y apache2 # sudo yum install -y apache2 # Ihr Apache-Server lauscht jetzt auf Port 80 für den HTTP-Verkehr. # Sie sehen (-l listen -t tcp -n numbers): ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128:::22 :::*
SSH-Tunnel, einfache Portweiterleitung
Standardmäßig ist die Website nicht über das öffentliche Internet zugänglich (http://104.155.45.71:80): wenn Sie einen privaten Cluster haben, möchten Sie ihn nicht öffentlich zugänglich machen. Wenn wir die Website auf dem Server anzeigen möchten, können wir den Port über die SSH-Sitzung tunneln.
SSH-Tunnel mit -L [MyPort]:[AfterTunnel_address]:[DestPort]
# auf Ihrem Rechner, ausführlicher Verbindungsstring mit Tunnel
ssh -i ~/.ssh/client_x_cloud_development abij@104.155.45.71 -L8080:localhost:80
Jetzt können wir auf die Website mit der Adresse: http://localhost:8080 zugreifen, die im Tunnel zu localhost 8080 geht. Nach dem Tunnel zu localhost Port 80.
Um Ihnen das Leben leichter zu machen, können wir diese Verbindungszeichenfolge in der Datei ssh-config konfigurieren.
# Ihr Rechner, bearbeiten Sie Ihre SSH-Konfigurationsdatei vim ~/.ssh/config host client_x_dev Hostname 104.155.45.71 IdentityFile "~/.ssh/client_x_cloud_development" Benutzer abij LocalForward 8080 localhost:80
Jetzt können wir eine Verbindung herstellen über: ssh client_x_dev von Ihrem Rechner aus.
Machen Sie Ihren Linux-Knoten sicherer, indem Sie die Anmeldung mit Benutzername/Passwort verbieten. Sie können die Konfiguration des ssh-Daemons auf dem entfernten Linux-Knoten überprüfenmuss ChallengeResponseAuthentication und PasswordAuthentication auf no gesetzt haben. Dies ist die Standardeinstellung für Cloud-Computer, die mit public-key-login erstellt wurden.
Das funktioniert gut für einen einzelnen Port auf einem Rechner, aber ein Cluster besteht aus mehreren Servern mit mehreren Ports und Links zueinander. Die Links werden bei dieser Einrichtung nicht funktionieren, da wir localhost / 127.0.0.1 in unserem Browser verwenden. Für dieses Szenario können wir den Socks-Proxy verwenden.
Socken Proxy
Ein Socks-Proxy leitet alle Ports weiter und kann die DNS-Lookups weiterleiten. Der gesamte Datenverkehr wird über die SSH-Verbindung transportiert und ist somit verschlüsselt, wenn der Proxy aktiviert ist. Alle Anfragen gehen durch den Tunnel! Sie sollten
Standardmäßig leitet er DNS-Lookups weiter und stellt eine Verbindung zu 127.0.0.1 auf Port 1337 her. Ändern Sie die ssh-Konfiguration für DynamicForward anstelle von LocalForward, um den Sock-Proxy zu aktivieren.
SSH DynamicForward mit der Befehlszeilenoption -D [localport]
# Ihr Rechner, ssh-Konfigurationsdatei: ~/.ssh.config host client_x_dev Hostname 104.155.45.71 IdentityFile "~/.ssh/client_x_cloud_development" Benutzer abij DynamicForward 1337
Wenn Sie mit ssh client_x_dev eine Verbindung zu Ihrem Linux-Knoten herstellen, sind Sie startklar! Sie können nun auf die internen IP-Adressen und die internen DNS-Servernamen zugreifen, um Ihre Websites aufzurufen. Interne Links zwischen Servern funktionieren ebenfalls!
Verbindung über Proxy-Plugin
- Verwenden Sie einen separaten Browser, zum Beispiel Firefox
- Installieren Sie ein Proxy-Plugin (ich mag Toggle Proxy)
- Konfigurieren Sie das Plugin so, dass es SOCKS5 über
localhostPort1337verwendet und die DNS-Fernauflösung aktiviert, wenn möglich. - Das Navigieren zu privaten IP-Adressen funktioniert über den Proxy!
Im Dezember 2018-Update verwende ich Chrome mit dem benutzerdefinierten Profil, um mit dem standardmäßig aktivierten Socks-Proxy zu starten.
Fazit
Bei der Erstellung von Cloud-Ressourcen oder Linux-Servern im Allgemeinen sollten Sie SSH-Schlüssel mit einer Passphrase dem Passwort-Login vorziehen. Vereinfachen Sie Ihre ssh-Verbindungen mit der Datei ~/.ssh/config.
Wenn Sie auf einen einzelnen Port zugreifen möchten, können Sie eine Portweiterleitung mit LocalFoward in Ihrer Konfigurationsdatei verwenden. Sie können den Port erreichen, indem Sie localhost in Ihrem Browser verwenden. Eine Einschränkung ist, dass Sie keine DNS-Lookups verwenden können, Links zu anderen Knoten nicht funktionieren und Sie jeden Host/Port als separaten Eintrag in die ssh-config-Datei eintragen müssen.
Mit dem DynamicForward können wir einen Socks-Proxy verwenden, um diese Funktionen zu aktivieren. Dies funktioniert sehr gut mit einem Cluster in der Cloud ohne öffentlichen Internetzugang. Die Kommunikation zwischen dem Browser und der Remote-Maschine ist verschlüsselt.
Unsere Ideen
Weitere Blogs
Contact



