SSH-Tunnel: Unterschied zwischen den Versionen

Aus Hergipedia
Zur Navigation springen Zur Suche springen
Zeile 39: Zeile 39:
Um z.B. einen Tunnel zur Hergipedia zu erstellen kann nach key-Tausch folgendes Script verwendet werden (Cygwin und Linux):
Um z.B. einen Tunnel zur Hergipedia zu erstellen kann nach key-Tausch folgendes Script verwendet werden (Cygwin und Linux):


alte Version:


<source lang="bash">
<source lang="bash">
Zeile 76: Zeile 77:
</source>   
</source>   


neue Version:
<source lang="bash">
#!/bin/bash
############################################################
# create a tunnel from port SERVER_PORT on SERVER_IP,
#                  to port LOCAL_PORT  on localhost
#                      via TUNNEL_USER@TUNNEL_IP
############################################################
# adjust these variables when installing this script
TUNNEL_USERNAME=$USER
TUNNEL_IP=134.245.135.20
SERVER_IP=134.245.135.211
LOCAL_PORT=8081
SERVER_PORT=80
cd /proc
SEARCH_FOR=".*$LOCAL_PORT:$SERVER_IP:$SERVER_PORT.*"
pids=""
for i in [0123456789]*; do
datei_inhalt=`<$i/cmdline`
if [[ $datei_inhalt =~ $SEARCH_FOR ]]; then
pids+="$i "
fi
done
test ! -z "$pids" && kill -KILL $pids
nohup ssh "$TUNNEL_USERNAME"@"$TUNNEL_IP" -o TCPKeepAlive=yes -N -f -L "$LOCAL_PORT":"$SERVER_IP":"$SERVER_PORT" > /dev/null 2>&1 &
# check Operating System
if [ ! -z "$SYSTEMDRIVE" ]; then
        # unter Windows
        PROGRAMS=`cygpath "$PROGRAMFILES"`
        cd "$PROGRAMS/Mozilla Firefox"
        nohup firefox.exe localhost:"$LOCAL_PORT" > /dev/null 2>&1 &
else
        # unter Linux
        nohup firefox localhost:"$LOCAL_PORT" > /dev/null 2>&1 &
fi
</source
<br>
<br>
[[Kategorie:Installations- und Konfigurationsanleitungen]]
[[Kategorie:Installations- und Konfigurationsanleitungen]]
[[Kategorie:Anleitung]]
[[Kategorie:Anleitung]]

Version vom 13. Januar 2010, 14:36 Uhr

Sinn & Zweck des SSH-Tunnels

Ein SSH-Tunnel ermöglicht es, eine verschlüsselte SSH-Verbindung zu einem Dienst eines beliebigen entfernten Computers (Server) über einen zweiten Rechner (Gateway) herzustellen. So können beispielsweise Firewalls oder sonstige Sicherheitsmechanismen auf sichere Weise gezielt umgangen werden.

Das Prinzip

Der User nutzt an seinem Arbeitsrechner A einen SSH-Client (hier der Einfachheit halber den in cygwin implementierten), um eine mit SSH verschlüsselte Verbindung zu dem Gateway-Rechner B herzustellen. Dieser Gateway-Rechner B dient quasi als Sprungbrett und baut wiederum eine (unverschlüsselte) Verbindung zum eigentlichen Server C und dem entsprechenden Dienst auf.

Das Prinzip wird auch als Portforwarding bezeichnet, da der Dienst, der ursprünglich auf dem Server C angeboten wird, über den Sprungbrettrechner B lokal auf den Arbeitsplatzrechner A durchgereicht und dort zur Verfügung gestellt wird.

Der Datenverkehr nimmt nun stets den "Umweg" über den Rechner B:

Anfrage: A --- verschlüsselt --> B --- unverschlüsselt --> C
Antwort: A <-- verschlüsselt --- B <-- unverschlüsselt --- C

Was brauche ich?

Folgendes sind die Voraussetzung für die erfolgreiche Umsetzung dieser Idee:

  • cygwin-Installation (siehe Cygwin: Basisinstallation) inkl. ssh-client - alternativ bieten auch andere SSH-Clients diese Funktion an.
  • Sprungbrettrechner, der vorzugsweise von überall erreichbar ist, mit SSH-Zugang inkl. passender Login-Daten (z.B. acid-Rechner)

Vorgehensweise

Da Hergipedia beispielsweise außerhalb des Universitätsnetzes nicht erreichbar ist, können wir uns eines SSH-Tunnels bedienen: Dafür stellt man im cygwin-Terminal mit folgendem Befehl eine SSH-Verbindung beispielsweise zur acid1 als Sprungbrettrechner her, der dann zum Hergipedia-Webserver auf die IP 134.245.160.160 und den Port 80 weiterverbindet.

Achtung: Für user ist der entsprechende Benutzername einzutragen!

ssh user@acid1 -L 8080:134.245.135.211:80

Für den Fall, dass kein SSH-Keyexchange vorgenommen wurde, wird jetzt nach dem dazugehörigen Passwort gefragt. Sobald die Benutzerautorisierung erfolgreich war, steht der Tunnel. 8080 ist der lokale (TCP-)Port, unter dem nun der Dienst zur Verfügung steht. Der SSH-Client kann nun minimiert werden, muss jedoch im Hintergrund weiterlaufen. Hergipedia kann nun - solange die SSH-Verbindung besteht - unter folgender Adresse abgerufen werden:

http://localhost:8080/mediawiki/

Viel Spaß bei der Nutzung von Hergipedia über den sicheren SSH-Tunnel!

Beispielscript zur Automatisierung

Um z.B. einen Tunnel zur Hergipedia zu erstellen kann nach key-Tausch folgendes Script verwendet werden (Cygwin und Linux):

alte Version:

#!/bin/bash
 
############################################################
# create a tunnel from port SERVER_PORT on SERVER_IP,
#                   to port LOCAL_PORT  on localhost
#                       via TUNNEL_USER@TUNNEL_IP
############################################################
 
# adjust these variables when installing this script
TUNNEL_USERNAME=$USER
TUNNEL_IP=134.245.135.20
SERVER_IP=134.245.135.211
LOCAL_PORT=8081
SERVER_PORT=80
 
cd /proc
 
SEARCH_FOR='\000'"$LOCAL_PORT:$SERVER_IP:$SERVER_PORT"
pids=`grep -P "$SEARCH_FOR" [0123456789]*/cmdline | grep -o '[0123456789]\+' | tr '\n' ' '`
test ! -z "$pids" && kill -KILL $pids
 
nohup ssh "$TUNNEL_USERNAME"@"$TUNNEL_IP" -o TCPKeepAlive=yes -N -f -L "$LOCAL_PORT":"$SERVER_IP":"$SERVER_PORT" > /dev/null 2>&1 &
 
# check Operating System
if [ ! -z "$SYSTEMDRIVE" ]; then
        # unter Windows
	PROGRAMS=`cygpath "$PROGRAMFILES"`
        cd "$PROGRAMS/Mozilla Firefox"
        nohup firefox.exe localhost:"$LOCAL_PORT" > /dev/null 2>&1 &
else
        # unter Linux
        nohup firefox localhost:"$LOCAL_PORT" > /dev/null 2>&1 &
fi


neue Version: <source lang="bash">

  1. !/bin/bash
  1. create a tunnel from port SERVER_PORT on SERVER_IP,
  2. to port LOCAL_PORT on localhost
  3. via TUNNEL_USER@TUNNEL_IP
  1. adjust these variables when installing this script

TUNNEL_USERNAME=$USER TUNNEL_IP=134.245.135.20 SERVER_IP=134.245.135.211 LOCAL_PORT=8081 SERVER_PORT=80

cd /proc

SEARCH_FOR=".*$LOCAL_PORT:$SERVER_IP:$SERVER_PORT.*" pids="" for i in [0123456789]*; do datei_inhalt=`<$i/cmdline` if $datei_inhalt =~ $SEARCH_FOR ; then pids+="$i " fi done test ! -z "$pids" && kill -KILL $pids

nohup ssh "$TUNNEL_USERNAME"@"$TUNNEL_IP" -o TCPKeepAlive=yes -N -f -L "$LOCAL_PORT":"$SERVER_IP":"$SERVER_PORT" > /dev/null 2>&1 &

  1. check Operating System

if [ ! -z "$SYSTEMDRIVE" ]; then

       # unter Windows
       PROGRAMS=`cygpath "$PROGRAMFILES"`
       cd "$PROGRAMS/Mozilla Firefox"
       nohup firefox.exe localhost:"$LOCAL_PORT" > /dev/null 2>&1 &

else

       # unter Linux
       nohup firefox localhost:"$LOCAL_PORT" > /dev/null 2>&1 &

fi </source