====== SSH ====== ===== Idle Session timeout ===== Clientseitig (wird pro SSH-Session angewendet): ''/etc/ssh/ssh_config'' ServerAliveInterval XX ServerAliveCountMax YY Serverseitig (wird Systemweit angewendet): ''/etc/ssh/ssh_config'' ClientAliveInterval XX 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 "cron" laufen soll, muss man hier eine andere Authentifizierungsmethode wählen: Host-Key ==== 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". ssh-copy-id -i ~/.ssh/id_rsa.pub @ Wenn ''ssh-copy-id'' nicht vorhanden ist dann kann dies auch von Hand gemacht werden. scp .ssh/id_rsa.pub @:/.ssh/authorized_keys oder cat .ssh/id_rsa.pub | ssh @ cat>> ~/.ssh/authorized_keys 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. #!/bin/bash SSHUSER=root SSHRSA= AUTHKEYSFILE=(für gewöhnlich: /.../.ssh/authorized_keys) echo echo echo "Dieses Script kopiert den öffentlichen SSH-RSA Key auf den unten angegebenen PC." echo "Danach kann man sich mit einer Passphrase am PC anmelden." 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 "Kopiere öffentlichen RSA-Key." ssh-copy-id -i $SSHRSA.pub $SSHUSER@$TARGETSVR } if ssh -i $SSHRSA $SSHUSER@$TARGETSVR "test -e $AUTHKEYSFILE"; then echo "Authenticationfile: $AUTHKEYSFILE existiert." ssh -i $SSHRSA $SSHUSER@$TARGETSVR "cat $AUTHKEYSFILE |grep root@ng1" > /dev/null 2>&1 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/CLient zu erhalten, welcher hinter einer Firewall ist und diese keine Portfreigaben konfiguriert hat. Remote-Ziel-Server <-----> FIREWALL <-----> SSH-Gateway-Server <-----> SSH-Client ==== Vorbereitungen auf dem Gateway ==== Folgende Vorbereitungen auf dem SSH-Gateway-Server treffen. vi /etc/ssh/sshd_config Einträge andern/hinzufügen: ClientAliveInterval 30 ClientAliveCountMax 99999 GatewayPorts yes AllowTcpForwarding yes Die ersten 2 Zeilen sorgen dafür, dass die Verbindung, bei Inaktivität, nicht wieder abgebaut wird. 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. ssh -p2000 -fNC -R 10011::22 @ ^Parameter ^ Beschreibung ^ | –p2000 | (optional) anderer Port anstatt von "22" auf dem Gateway | | -f | SSH in den Hintergrund schicken, damit die Verbindung weiterläuft, auch wenn man die eigene SSH-Verbindung trennt | | N | keine Remote-Kommandos annemmen, nur Tunnel aufbauen | | C | (optional) Komprimierung einschalten, evtl. dadurch Performanceeinbußen < | -R | Reverse Tunnel aufgebauen | | 10011 | Ausgangsport des Gateways zum Remote-Ziel-Server, darüber verbindet man sich vom Gateway zum Remote-Ziel-Server | | localhost | Hier ist der Remote-Ziel-Server selbst gemeint, bei Verbindungen zu Geräten hinter dem Remote-Ziel-Server, sollte die IP-Adresse des Remote-Ziel-Server verwendet werden | | 22 | SSH-Eingangsport am Remote-Ziel-Server | ==== Verbindung Gateway zum Remote-Ziel-Server ==== Hiermit verbindet man sich vom Gateway zum Remote-Ziel-Server. ssh -p10011 ==== Autossh ==== Die Verbindung kann mit dem Tool ''autossh'' automatisch aufgebaut werden. apt install autossh Verbindungsscript zum Aufbau des Reverse SSH Tunnel anlegen. Inhalt: #!/bin/bash /usr/bin/autossh -p2000 -fNC -R 10011::22 @ chmod +x