Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:ssh [2020/10/02 06:55] adilinux:ssh [2024/02/26 14:23] (aktuell) adi
Zeile 11: Zeile 11:
  
 ===== SSH Ohne Password ===== ===== SSH Ohne Password =====
-Möchte man per Skript einen Befehl über ssh senden, dann würde das Skript immer nach dem Password fragen. +Möchte man per Script einen Befehl über ssh senden, dann würde das Script immer nach dem Password fragen. 
-Wenn dieses Skript dann aber per "cron" laufen soll, muss man hier eine andere Authentifizierungsmethode wählen: Host-Key+Wenn dieses Script dann aber per "cron" laufen soll, muss man hier eine andere Authentifizierungsmethode wählen: Host-Key
  
-==== RSA-Key erstellen ====+==== Public-Key erstellen ====
 So erstellt man einen RSA Host-Key: So erstellt man einen RSA Host-Key:
-  ssh-keygen -t rsa+  ssh-keygen -t [rsa|Ed25519]
 Zunächst fragt das Programm nach dem Pfad zur RSA-Datei. Diesen kann man einfach bestätigen. 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. Nimmt man hier aber einen anderen Dateinamen oder Pfad, muss man bei der SSH-Verbindung den Pfad explizit angeben.
Zeile 45: Zeile 45:
 echo echo
 echo echo
-echo "Dieses Skript kopiert den öffentlichen SSH-RSA Key auf den unten angegebenen PC."+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 "Danach kann man sich mit einer Passphrase am PC anmelden."
 echo echo
Zeile 70: Zeile 70:
 fi</code> fi</code>
  
-==== Reverse SSH ====+===== 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
-sudo nano /etc/ssh/sshd_config +
-dort dann am besten folgende Einträge suchen und abändern bzw. die Einträge am Ende vornehmen:+
  
-ClientAliveInterval 30+==== Vorbereitungen auf dem Gateway ==== 
 +Folgende Vorbereitungen auf dem SSH-Gateway-Server treffen. 
 +<code bash>vi /etc/ssh/sshd_config</code> 
 +Einträge andern/hinzufügen: 
 +<code>ClientAliveInterval 30
 ClientAliveCountMax 99999 ClientAliveCountMax 99999
 GatewayPorts yes GatewayPorts yes
-AllowTcpForwarding yes +AllowTcpForwarding yes</code>
-+
-+
-+
-+
-ClientAliveInterval 30 +
-ClientAliveCountMax 99999 +
-GatewayPorts yes +
-AllowTcpForwarding yes +
-Mit den ersten beiden Zeilen wird sichergestellt, dass die Verbindung nicht einfach wieder abgebaut wird, wenn eine Zeitlang keine Daten über die Leitung flutschen.+
  
-GatewayPorts yes erlaubt esdas Gateway quasi als “Durchlauferhitzer” zu nutzend.hvon einem anderen Gerät über den Gateway Pi in der Mitte auf den Remote Pi zuzugreifen.+Die ersten 2 Zeilen sorgen dafürdass die Verbindungbei Inaktivität, nicht wieder abgebaut wird. 
 +Die 3Zeile aktivert den Gateway-Modus und die 4. Zeile aktiviert das Weiterleiten von TCP-Paketen.
  
-AllowTcpForwarding yes erlaubt es, auch andere Protokolle – z.B. http –  im SSH Tunnel zu verpacken.+==== 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:<IP_REMOTEZIEL_SERVER | localhost>:22 <USER>@<SSH_GATEWAY_IP></code> 
 +^Parameter ^ Beschreibung ^ 
 +| –p2000 | (optional) anderer Port anstatt von "22" auf dem Gateway | 
 +| -f | SSH in den Hintergrund schicken, damit die Verbindung weiterläuftauch 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. 
 +<code bash>ssh -p10011 <IP_REMOTEZIEL_SERVER | localhost></code> 
 + 
 +==== Autossh ==== 
 +Die Verbindung kann mit dem Tool ''autossh'' automatisch aufgebaut werden. 
 +<code bash>apt install autossh</code> 
 + 
 +Verbindungsscript zum Aufbau des Reverse SSH Tunnel anlegen. 
 + 
 +Inhalt: 
 +<code>#!/bin/bash 
 +/usr/bin/autossh -p2000 -fNC -R 10011:<IP_REMOTEZIEL_SERVER | localhost>:22 <USER>@<SSH_GATEWAY_IP></code> 
 + 
 +<code bash>chmod +x <SCRIPT>.sh</code> 
 + 
 +Nun noch das Script per Crontab starten lassen 
 +<code bash>crontab -e</code> 
 +Inhalt einfügen: 
 +<code>@reboot <PFAD_ZU_SCRIPT.sh></code> 
 + 
 +==== SSH-Tunnel erweitern ==== 
 +Mit Reverse SSH kann man auch andere Ports, wie z.B. HTTP erreichen. 
 +Dazu erweitert man die Verbindung um eine weitere "-R" Anweisung. 
 +<code bash>ssh -p2000 -fNC -R 8000:<IP_REMOTEZIEL_SERVER | localhost>:80 -R 10011:<IP_REMOTEZIEL_SERVER | localhost>:22 <USER>@<SSH_GATEWAY_IP></code> 
 +Hier wird der Port 8000 von Außen auf den Port 80 umgeleitet. Läuft der Webserver auf einem anderen Gerät, wird anstatt ''<IP_REMOTEZIEL_SERVER | localhost>'' die IP-Adresse des Gerätes angegeben.
  
 ===== Troubleshooting ===== ===== Troubleshooting =====
 Wenn bei einer Verbindung folgende Antwort kommt: <code>Unable to negotiate with <IP-ADRESSE> port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1</code> Wenn bei einer Verbindung folgende Antwort kommt: <code>Unable to negotiate with <IP-ADRESSE> port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1</code>
-Dann die Verbindung wie folgt aufbauen <code bash>ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 <IP-ADRESSE></code>oder <code bash>ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes256-cbc <IP-ADRESSE></code>+Dann die Verbindung wie folgt aufbauen <code bash>ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 <IP-ADRESSE></code>oder <code bash>ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes256-cbc <IP-ADRESSE></code> oder <code bash>ssh -oHostKeyAlgorithms=+ssh-dss -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes256-cbc <IP-ADRESSE></code> 
 + 
 +Man kann in der ''~/.ssh/config'' das auch dauerhaft für den Host definieren: 
 +<code bash>Host <HOSTNAME> <FQDN> 
 +  KexAlgorithms diffie-hellman-group1-sha1 
 +  Ciphers 3des-cbc</code>
  
 Ggf. folgendes in der ''/etc/ssh/ssh_config'' einfügen/anpassen um die Parameter automatisch bei Verbindung zu verwenden: <code>KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 Ggf. folgendes in der ''/etc/ssh/ssh_config'' einfügen/anpassen um die Parameter automatisch bei Verbindung zu verwenden: <code>KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
 Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr</code> Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr</code>
Navigation
Drucken/exportieren
QR-Code
QR-Code SSH (erstellt für aktuelle Seite)