So heute Nacht habe ich mir endlich mal die Zeit genommen mir ssh genauer anzusehen. Ich wollte das zwar schon viel frueher machen, bin aber irgendwie nie richtig dazu gekommen. Weil ich die Ergebnisse als fuer Andere auch wichtig erachte, hier mal eine kleine Doku, dann spart ihr sicher etwas Zeit und Geduld die ihr in eine andere Arbeit investieren koennt.

Tunnel soll Rechner:port direkt via localhost erreichbar machen

Befehle:

[1] ssh -L 8888:127.0.0.1:631 root@192.168.0.3
[2] konqueror localhost:8888

Befehl [1] wird auf myhost eingegeben und öffnet auf myhost den Port:8888 welcher mit 192.168.0.1:631 verbunden ist, wenn man [2] eingibt. Der Vorteil ist klar: nun kann man z.B. Cups konfigurieren, ohne das Administrationsinterface für das ganze Netzwerk freigeben zu müssen bzw man muss kein unsicheres X-Forwarding verwenden.

Diagramm:

| myhost | -------> |192.168.0.1|

Aehnliche Szenarien

Befehl [1] auf myhost eingebenben, oeffnet eine Verbindung zu ssh1. Wichtig ist aber, dass localhost:9999 nun mit einem Rechner hinter dem ssh gateway verbunden wird. So kann man z.B. shfs verwenden um mit einem Programm auf den Daten an der Uni zu arbeiten. Alternativ zu [2] kann nun naemlich [3] dazu verwendet die Daten im ~/ Homeverzeichnis lokal zu mounten.

[1] ssh -L 9999:britney.informatik.uni-tuebingen.de:22 schiele@ssh1.informatik.uni-tuebingen.de
[2] ssh schiele@localhost -p 9999
[3] shfsmount -p 9999 schiele@localhost /tmp/a/ (as root only!)

und hier noch ein Beispiel, wie man den www-cache proxy von auserhalb verwendet. Wozu ist das gut fragen sich manche?! Ganz einfach: Nicht alle Webseiten sind von auserhalb des Uni-netzes erreichbar (z.b. manche seiten der Bib).

[1] ssh -L 7777:britney.informatik.uni-tuebingen.de:22 schiele@ssh1.informatik.uni-tuebingen.de
[2] konqueror (Proxy eintragen, www-cache.informatik.uni-tuebingen.de:3128)

Im Browser muss dann nur noch der Proxy eingeschalten werden, eintraege wie oben und dann sollte das auch schon funktionieren.

Tunnel soll Rechner hinter NAT erreichbar machen

Befehl [1] wir auf einem Host myhost innerhalb des NATs ausführt, z.B. im privaten Heimnetz welches hinter einem Router ist. Nun kann man vom Host serverkommune.de den Befehl [2] eingeben und landet dann hinter dem NAT direkt auf dem Host myhost am ssh-server. Mit Befehl [3] kann man von irgendwo im Internet eine Verbindung zum myhost machen.

   [1] ssh -R 1099:localhost:22 joachim@serverkommune.de -N
   [2] ssh localhost -p 1099
   [3] ssh serverkommune.de -p 1099
   
   | myhost | -------> |firewall| <---------> (internet) <---------> serverkommune.de     
   |<--    NAT bereich       -->|

Wie man im Diagramm oberhalb sieht, sind alle Pfeile bis auf den innerhalb des NATs in beide Richtungen gezeichnet und signalisieren, dass alle Rechner direkten Zugriff aufeinander haben. Innerhalb des NAT kann aber ein Rechner von ausserhalb nicht direkt angesprochen werden, weil innerhalb andere Adressen 192.168.0.0/24 verwendet werden, welche von aussen nicht erreichbar sind. Nun will man aber teilweise trotzdem auf einen solchen Rechner:port zugreifen. Das geht dann indem man von innen auf einem Rechner auserhalb des NATs connected und einen Ruecktunnel aufmacht. Alternativ kann man natürlich in der Firewall auch ein Portforwarding machen mittels iptables und den SNAT,REDIRECT Regeln.

Note: "GatewayPorts yes" muss serverkommune.de in der /etc/ssh/sshd_config gesetzt sein fuer [3]

Dies lässt sich sehr gut mit "screen/tmux" bzw. "byobu" zum kooperativen Arbeiten verwenden.

Dank an Thomas Schreiner fuer den Tipp.

Alternative Zugriffsmethoden

Mit konqueror direkt sftp nutzen: (fish ginge auch, aber sftp ist besser implementiert)

sftp://schiele@ssh1.informatik.uni-tuebingen.de/

ssh und bandwidth limiting

Put this into ~/.ssh/config where 50k is the limit for the connection.

Host server1

  Hostname server1-slow
  Port 222
  proxycommand pv -q -L 50k | nc dettner.dyndns.org 222
  

An other approach could be to create an alias in ~/.bashrc which could may be look like this (untested) which of course would only work for ssh tunnels created using the ssh-slow alias:

alias ssh-slow='ssh -o "ProxyCommand pv -q -L 50k | nc dettner.dyndns.org 222"'

SOCKS5 proxy

use ssh for socks proxy:

   ssh -D 12345 -i id_rsa root@192.168.56.101

keep this ssh-connection open as long you work on the server!

start the browser:

   HOME=$(mktemp -d)  nix-shell --pure -p chromium --command --proxy-server="socks://localhost:12345" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --incognito

Links

Powered by MediaWiki