Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| — | linux:ssh [2024/02/26 13: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, | ||