Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | linux:ssh [2024/02/26 14:23] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== SSH ====== | ||
+ | ===== Idle Session timeout ===== | ||
+ | Clientseitig (wird pro SSH-Session angewendet): | ||
+ | < | ||
+ | ServerAliveCountMax YY</ | ||
+ | |||
+ | Serverseitig (wird Systemweit angewendet): | ||
+ | < | ||
+ | ClientAliveCountMax YY</ | ||
+ | |||
+ | ===== SSH Ohne Password ===== | ||
+ | Möchte man per Script einen Befehl über ssh senden, dann würde das Script immer nach dem Password fragen. | ||
+ | Wenn dieses Script dann aber per " | ||
+ | |||
+ | ==== Public-Key erstellen ==== | ||
+ | So erstellt man einen RSA Host-Key: | ||
+ | ssh-keygen -t [rsa|Ed25519] | ||
+ | Zunächst fragt das Programm nach dem Pfad zur RSA-Datei. Diesen kann man einfach bestätigen. | ||
+ | Nimmt man hier aber einen anderen Dateinamen oder Pfad, muss man bei der SSH-Verbindung den Pfad explizit angeben. | ||
+ | ssh -i < | ||
+ | |||
+ | Danach wird nach einer Passphrase gefragt. | ||
+ | Wenn die Passphrase leer gelassen wird, muss man sich per SSH, an dem jew. Remotehost und dem jew. User, nicht mehr mit Password anmelden. | ||
+ | |||
+ | ==== Public-Key kopieren ==== | ||
+ | Den erstellten Public-Key kopiert man einfach auf den für den jew. User auf dem Remotehost in das Verzeichnis " | ||
+ | ssh-copy-id -i ~/ | ||
+ | |||
+ | Wenn '' | ||
+ | scp .ssh/ | ||
+ | oder | ||
+ | cat .ssh/ | ||
+ | |||
+ | Nun kann man sich per SSH an den Remotehost mit dem Host-Key anmelden. | ||
+ | |||
+ | ==== Public-Key verteilen ==== | ||
+ | Man kann den Public-Key auf mehrere hosts z.B. mit diesem Script verteilen. | ||
+ | <code bash># | ||
+ | |||
+ | SSHUSER=root | ||
+ | SSHRSA=< | ||
+ | AUTHKEYSFILE=< | ||
+ | |||
+ | echo | ||
+ | echo | ||
+ | echo " | ||
+ | echo " | ||
+ | echo | ||
+ | |||
+ | read -t 20 -p "Bitte PC-Name eingeben: " TARGETSVR | ||
+ | |||
+ | function rsaright { | ||
+ | echo "Dem PC wird aktuell nicht vertraut, oder das Authenticationfile existiert nicht." | ||
+ | echo " | ||
+ | ssh-copy-id -i $SSHRSA.pub $SSHUSER@$TARGETSVR | ||
+ | } | ||
+ | |||
+ | if ssh -i $SSHRSA $SSHUSER@$TARGETSVR "test -e $AUTHKEYSFILE"; | ||
+ | echo " | ||
+ | |||
+ | ssh -i $SSHRSA $SSHUSER@$TARGETSVR "cat $AUTHKEYSFILE |grep root@ng1" | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo "Dem Zielserver wird vertraut, man kann sich nun per Passphrase authentifizieren." | ||
+ | else | ||
+ | rsaright | ||
+ | fi | ||
+ | else | ||
+ | rsaright | ||
+ | fi</ | ||
+ | |||
+ | ===== Reverse SSH ===== | ||
+ | Reverse SSH Tunnel können genutzt werden um Zugriff auf ein Remote SSH-Server/ | ||
+ | |||
+ | Remote-Ziel-Server < | ||
+ | |||
+ | ==== Vorbereitungen auf dem Gateway ==== | ||
+ | Folgende Vorbereitungen auf dem SSH-Gateway-Server treffen. | ||
+ | <code bash>vi / | ||
+ | Einträge andern/ | ||
+ | < | ||
+ | ClientAliveCountMax 99999 | ||
+ | GatewayPorts yes | ||
+ | AllowTcpForwarding yes</ | ||
+ | |||
+ | Die ersten 2 Zeilen sorgen dafür, dass die Verbindung, bei Inaktivität, | ||
+ | Die 3. Zeile aktivert den Gateway-Modus und die 4. Zeile aktiviert das Weiterleiten von TCP-Paketen. | ||
+ | |||
+ | ==== Verbindung vom Remote-Ziel-Server zum Gateway ==== | ||
+ | Die SSH-Verbindung vom Remote-Ziel-Server zum Gateway wird wie folgt aufgebaut. | ||
+ | <code bash>ssh -p2000 -fNC -R 10011:< | ||
+ | ^Parameter ^ Beschreibung ^ | ||
+ | | –p2000 | (optional) anderer Port anstatt von " | ||
+ | | -f | SSH in den Hintergrund schicken, damit die Verbindung weiterläuft, | ||
+ | | N | keine Remote-Kommandos annemmen, nur Tunnel aufbauen | | ||
+ | | C | (optional) Komprimierung einschalten, | ||
+ | | -R | Reverse Tunnel aufgebauen | | ||
+ | | 10011 | Ausgangsport des Gateways zum Remote-Ziel-Server, | ||
+ | | localhost | Hier ist der Remote-Ziel-Server selbst gemeint, bei Verbindungen zu Geräten hinter dem Remote-Ziel-Server, | ||
+ | | 22 | SSH-Eingangsport am Remote-Ziel-Server | | ||
+ | |||
+ | ==== Verbindung Gateway zum Remote-Ziel-Server ==== | ||
+ | Hiermit verbindet man sich vom Gateway zum Remote-Ziel-Server. | ||
+ | <code bash>ssh -p10011 < | ||
+ | |||
+ | ==== Autossh ==== | ||
+ | Die Verbindung kann mit dem Tool '' | ||
+ | <code bash>apt install autossh</ | ||
+ | |||
+ | Verbindungsscript zum Aufbau des Reverse SSH Tunnel anlegen. | ||
+ | |||
+ | Inhalt: | ||
+ | < | ||
+ | / | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | Nun noch das Script per Crontab starten lassen | ||
+ | <code bash> | ||
+ | Inhalt einfügen: | ||
+ | < | ||
+ | |||
+ | ==== SSH-Tunnel erweitern ==== | ||
+ | Mit Reverse SSH kann man auch andere Ports, wie z.B. HTTP erreichen. | ||
+ | Dazu erweitert man die Verbindung um eine weitere " | ||
+ | <code bash>ssh -p2000 -fNC -R 8000:< | ||
+ | Hier wird der Port 8000 von Außen auf den Port 80 umgeleitet. Läuft der Webserver auf einem anderen Gerät, wird anstatt ''< | ||
+ | |||
+ | ===== Troubleshooting ===== | ||
+ | Wenn bei einer Verbindung folgende Antwort kommt: < | ||
+ | Dann die Verbindung wie folgt aufbauen <code bash>ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 < | ||
+ | |||
+ | Man kann in der '' | ||
+ | <code bash> | ||
+ | KexAlgorithms diffie-hellman-group1-sha1 | ||
+ | Ciphers 3des-cbc</ | ||
+ | |||
+ | Ggf. folgendes in der ''/ | ||
+ | Ciphers 3des-cbc, |