Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
howtos:ssh [2017/09/19 07:41] – angelegt morquai | howtos:ssh [2022/02/18 08:09] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 24: | Zeile 24: | ||
ssh -l user server.example.com # oder anders | ssh -l user server.example.com # oder anders | ||
ssh user@server.example.com | ssh user@server.example.com | ||
- | Beide Befehle sind identisch, openssh ermöglicht einen Login des Benutzers " | + | Beide Befehle sind identisch, openssh ermöglicht einen Login des Benutzers " |
Host | Host | ||
| | ||
+ | Nach der Eingabe von | ||
+ | ssh server.example.com | ||
+ | wird man freundlich nach dem Passwort gefragt. | ||
+ | ==== Schritt 2: geht das auch ohne Passwort ==== | ||
+ | Natürlich muss der Benutzer sich ausweisen, dafür ist aber nicht unbedingt ein Passwort erforderlich. Ein SSH Key (eine Art Ausweis) reicht auch aus, muss aber erstmal angelegt werden. Ich empfehle DRINGEND den Schlüssel mit einem Passwort (" | ||
+ | ssh-keygen -t rsa -b 2048 -f < | ||
+ | Lässt man "-f < | ||
+ | ssh-keygen -t rsa -b 2048 -f /tmp/rsakey | ||
+ | Generating public/ | ||
+ | Enter passphrase (empty for no passphrase): | ||
+ | Enter same passphrase again: | ||
+ | Your identification has been saved in / | ||
+ | Your public key has been saved in / | ||
+ | The key fingerprint is: | ||
+ | SHA256: | ||
+ | The key's randomart image is: | ||
+ | +---[RSA 2048]----+ | ||
+ | | . ..o+.+o .o*+.E| | ||
+ | | o .o + ... Bo | | ||
+ | | | ||
+ | | . o.o.o= =+.| | ||
+ | | . . S+++ o o.| | ||
+ | | o o o= . .| | ||
+ | | o . .. | | ||
+ | | .o | | ||
+ | | | ||
+ | +----[SHA256]-----+ | ||
+ | Zur Sicherheit besteht der Schlüssel aus zwie Teilen, einem öffentlichen, | ||
+ | Um sich zu authentifizieren muss auf dem Server der Public Key und auf dem Client der Private Key " | ||
+ | mv / | ||
+ | ls -ld / /home/ /home/user/ / | ||
+ | drwxr-xr-x | ||
+ | drwxr-xr-x | ||
+ | drwxr-xr-x | ||
+ | drwx------ | ||
+ | -rw------- | ||
+ | -rw-r--r-- | ||
+ | Damit haben wir auf der Client Seite erstmal alles erledigt und können nun der Public Key auf den Server packen. Die einfachste Methde ist der folgende (siehe unsere .ssh/ | ||
+ | ssh-copy-id -i / | ||
+ | Dabei wird, letztmalig, das Passwort des Benutzers " | ||
+ | Host server1 | ||
+ | HostName | ||
+ | Port 921 | ||
+ | User username | ||
+ | DynamicForward | ||
+ | LocalForward | ||
+ | LocalForward | ||
+ | IdentityFile | ||
+ | Damit haben wir die Passwort Abrage des Servers deaktiviert und müssen nun die Passphrase des SSH Keys eingeben. Damit haben wir aber leider nur die eine Passwortabfrage durch eine andere ersetzt. | ||
+ | ==== Schritt 3: Eine Passwortabfrage pro Tag ==== | ||
+ | Die openssh Entwickler sind anscheinend ziemlich faule Gesellen. Im Paket openssh befindet sich auch ein Agent, der die Aufgabe hat sich die SSH Keys im RAM zu merken und bei Bedarf zur Verfügung zu stellen. Die Ablage im RAM erfolgt natürlich nach allen Regeln der Sicherheit. Unter Linux (auch Cygwin) wird der Agent folgendermaßen benutzt: | ||
+ | ssh-agent | ||
+ | SSH_AUTH_SOCK=/ | ||
+ | SSH_AGENT_PID=10682402; | ||
+ | echo Agent pid 10682402; | ||
+ | Damit ist der Agent gestartet und die Befehle, die eine Benutzung ermöglichen, | ||
+ | SSH_AUTH_SOCK=/ | ||
+ | SSH_AGENT_PID=10682402; | ||
+ | echo Agent pid 10682402; | ||
+ | Und nun die Ausführung, | ||
+ | . ~/ | ||
+ | Nachdem der Agent gestartet wurde und die Benutzung eingerichtet ist, müssen wir nun dem Agenten den Private Key zur Verfügung stellen | ||
+ | ssh-add ~/ | ||
+ | Der Agent fordert uns auf die Passphrase einzugeben und kann nun die Aufgabe, den Private Key bei Bedarf zur Verfügung zu stellen, übernehmen. Die Anmeldung kann nun ohne jede Passwort Abfrage gemacht werden. | ||
+ | ssh server.example.com | ||
+ | Geschafft. die Passworteingabe ist ab nun nicht mehr erforderlich. Wir müssen nur nach einen Reboot daran denken den Agenten erneut zu starten und die ausgegebenen Befehle in die Datei ~/ | ||
+ | Wenn wir eine neue Shell starten muss natürlich auch hier die ~/ | ||
- | + | **Hinweis: wer PuTTY und openssh unter Cygwin parallel benutzt sollte sich die Benutzung von PAGEANT (PuTTY) und die Zusammenarbeit mit ssh-pageant (openssh unter Cygwin) anschauen. [[https:// | |
+ | |||
+ | ==== Schritt 4: Den SSH Key auch von server.example.com aus benutzen ==== | ||
+ | |||
+ | Oft findet man eine ganze Serverlandschaft, | ||
+ | **Ein Private Key darf den Client NIEMALS verlassen.**\\ | ||
+ | Natürlich hat openssh hier eine Lösung parat, denn der ssh-agent kann noch mehr. Der Private Key kann in einer ganze Kette aufeinander folgende SSH Sessions benutzt werden. Der Schalter " | ||
+ | client: ssh -A server.example.com | ||
+ | server.example.com: | ||
+ | Auch der auf " | ||
+ | host * | ||
+ | ForwardAgent yes | ||
+ | Und wieder etwas gelernt, man kann für die Definitionen in der .ssh/config Wildcards (" | ||
+ | |||
+ | ==== Schritt 5: nicht öffentliche Services lokal nutzen ==== | ||
+ | Was ist damit gemeint? Auf server.example.com läuft ein WebServer, der aus dem Internet nicht erreichbar ist, den wir aber auf unserem Client ansprechen wollen. Ein WebServer wird auf Port 80 (unverschlüsselt) oder 443 (verschlüsselt) angesprochen. Dieser Port wird aber von einer Firewall geblockt. Die Lösung lautet: Port Forwarding, was mit openssh kein Problem ist. | ||
+ | ssh -L 1234: | ||
+ | Was will uns der Dichter damit sagen? Die SSH Session wird überredet, auf dem Client den Port 1234 zu öffnen und jeglichen Traffic auf diesem Port an den Port 443 auf server.example.com (" | ||
+ | https:// | ||
+ | um den Webserver zu erreichen. \\ | ||
+ | |||
+ | Der Eintrag in der .ssh/config lautet | ||
+ | LocalForward | ||
+ | |||
+ | Verwirrend? Das liegt an der Doppelnutzung von " | ||
+ | Aber in der Serverlandschaft hinter server.example.com laufen mehrere WebServer, für jeden einzelnen ein Port Forwarding einzurichten ist wohl ein wenig aufwendig. Aber natürlich hat openssh alles zur Hand. Wir richten uns einfach einen Socks Proxy ein, den wir im Browser eintragen und schon stehen alle WebServer mit einem einzigen Eintrag im SSH Command zur Verfügung. | ||
+ | ssh -D 3128 server.example.com | ||
+ | Wie immer was es das schon. Nur noch im Browse die Proxy Einstellungen einstellen und die alle Webserver, die server.example.com erreichen kann, stehen zur Verfügung. Unschön ist das Verhalten, wenn man Namen statt IP-Adressen benutzt. Normalerweise sprechen wir Webseiten nach dem Schema < | ||
+ | Ach ja, wie sieht denn der Eintrag in der .ssh/config aus? | ||
+ | DynamicForward | ||
+ | |||
+ | |||
+ | ==== Fazit: Beispiel einer .ssh/config ==== | ||
+ | |||
+ | # Ersteinmal die Einstellungen, | ||
+ | Host * | ||
+ | # ssh-agent soll die private Keys zur Verfügung stellen | ||
+ | ForwardAgent yes | ||
+ | # Bei Ungereimtheiten mit Host Keys wollen wir gefragt werden | ||
+ | StrictHostKeyChecking ask | ||
+ | # den Wert mancher Variablen wollen wir mitschleppen, | ||
+ | # die sich auf die Sprachumgebung beziehen | ||
+ | SendEnv LANG LC_* | ||
+ | # Wo steht nochmal unser Private Key? | ||
+ | IdentityFile | ||
+ | # Nun zu Server.example.com | ||
+ | # Da die für alle Hosts geltenden Einstellungen hier ebenfalls gültig sind, brauchen wir nur | ||
+ | # anzugeben, was sich ändert oder was hinzukommt | ||
+ | Host Server.example.com | ||
+ | # wie lautet unser Benutzename | ||
+ | User user | ||
+ | # unser netter Socks 5 Proxy | ||
+ | DynamicForward | ||
+ | # Der lokale Forward um den Webserver auf server.example.com zu erreichen | ||
+ | # ist ja eigentlich unnötig, denn wir haben ja einen Dynamic Forward | ||
+ | LocalForward | ||
+ | # Hier mal ein Beispiel für mehrere Server | ||
+ | Host *.example.com | ||
+ | User user | ||
+ | |||
+ | Die Grundlagen sind gelegt und die meisten Fragen beantwortet. Weitergehende HowTo' | ||
| | ||