Manuel Wildauers blog

SSH Tunnel als socks5 proxy nutzen.

Jeder kommt mal in die Situation sich in einem nicht Vertrauenswürdigen Netzwerk zu befinden. Daher habe ich seit einigen Jahren bereits ein kleines Script in meinem ~/bin über welches ich einen SSH-Tunnel aufbauen kann.

Das Shellscript sucht sich einen Server aus der ~/.ssh/config raus über welchen der Tunnel aufgebaut werden soll.

Es wird aber nicht jeder Server genutzt, sondern nur die Einträge die am Ende der HOST Zeile als Kommentar #socks5 stehen haben.

Mit autossh wird dann die Verbindung aufrecht gehalten.

AUTOSSH(1): autossh is a program to start a copy of ssh and monitor it, restarting it as necessary should it die or stop passing traffic.

Aber nun hier das Shellscript:

#!/bin/bash

# ssh user config (http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config)
SSH_CONFIG=~/.ssh/config

# local port
PORT=8888

# array with hosts from SSH_CONFIG.
# append "#socks5" at the end of the Host line.
# Example: "Host yourHost #socks5"
eval HOSTS=( $(awk '/^Host(.*?)#socks5$/ {print $2}' ${SSH_CONFIG}) )
N=1
for index in `shuf --input-range=0-$(( ${#HOSTS[*]} - 1 )) | head -${N}`
do
        echo -en "Host: ${HOSTS[$index]} Port: ${PORT}\n"
        # using autossh - Automatically restart SSH sessions and tunnels
        AUTOSSH_DEBUG=1
        AUTOSSH_GATETIME=0
        autossh -M 20000 -N -D ${PORT} ${HOSTS[$index]}
done

Vorrausetzung ist natürlich dass der Port auf dem der SSH daemon läuft nicht geblockt wird.