SSH Tipps und Tricks: Difference between revisions
Line 6: | Line 6: | ||
<pre> | <pre> | ||
Host Host_B | Host Host_B | ||
ProxyCommand ssh GW_2 "/bin/bash 'exec 3<>/dev/tcp/%h/ | ProxyCommand ssh GW_2 "/bin/bash -c 'exec 3<>/dev/tcp/%h/%p; cat <&3 & cat >&3;kill $!'" | ||
</pre> | </pre> | ||
Zu GW_2 kommen wir aber nur über GW_1, also brauchen wir hierfür auch einen Eintrag: | Zu GW_2 kommen wir aber nur über GW_1, also brauchen wir hierfür auch einen Eintrag: | ||
<pre> | <pre> | ||
Host GW_2 | Host GW_2 | ||
ProxyCommand ssh GW_1 "/bin/bash -c 'exec 3<>/dev/tcp/%h/ | ProxyCommand ssh GW_1 "/bin/bash -c 'exec 3<>/dev/tcp/%h/%p; cat <&3 & cat >&3;kill $!'" | ||
</pre> | </pre> | ||
Jetzt gibt man auf Host_A einfach <i>ssh Host_B</i> ein und wird über die beiden Gateways GW_1 und GW_2 getunnelt. | Jetzt gibt man auf Host_A einfach <i>ssh Host_B</i> ein und wird über die beiden Gateways GW_1 und GW_2 getunnelt. | ||
Line 23: | Line 23: | ||
</pre> | </pre> | ||
Im Hintergrund werden dann die TunnelVerbindungen aufgebaut und man macht das PortForwarding direkt von Host_A nach Host_B. Sehr schlank und elegant. | Im Hintergrund werden dann die TunnelVerbindungen aufgebaut und man macht das PortForwarding direkt von Host_A nach Host_B. Sehr schlank und elegant. | ||
PS: Das /dev/tcp/%h/%p ist ein BASH-Builtin wobei %h und %p von der SSH durch Host (%h) und Port (%p) ausgefüllt werden | |||
==Ausbruch aus dem Paradies== | ==Ausbruch aus dem Paradies== |
Revision as of 09:52, 19 June 2012
SSH, der Weg zum Ziel
SSH über ein oder mehrere Hops
Um die SSH-Verbindung von Host_A zu Host_B machen zu können muß man sich über zwei Rechner dorthin tunneln (GW_1 und GW_2). Wenn man sich immer erst einloggt und dann weiter einloggt ist es manchmal sehr schwierig die Portforwardings mitzuschleifen, oder den Socks5-Proxy. Einfacher ist es, wenn man sich ProxyCommands für den Weg von Host_a zu Host_b definiert. Wir kommen also nur von GW_2 zu Host_b, also machen wir uns hierfür einen Eintrag in der ~/.ssh/config:
Host Host_B ProxyCommand ssh GW_2 "/bin/bash -c 'exec 3<>/dev/tcp/%h/%p; cat <&3 & cat >&3;kill $!'"
Zu GW_2 kommen wir aber nur über GW_1, also brauchen wir hierfür auch einen Eintrag:
Host GW_2 ProxyCommand ssh GW_1 "/bin/bash -c 'exec 3<>/dev/tcp/%h/%p; cat <&3 & cat >&3;kill $!'"
Jetzt gibt man auf Host_A einfach ssh Host_B ein und wird über die beiden Gateways GW_1 und GW_2 getunnelt.
Portforwardings für z.B. NFS macht man jetzt einfach so:
root@Host_A# share -F nfs -o ro=@127.0.0.1/32 /tmp root@Host_A# ssh -R 22049:localhost:2049 user@Host_B user@Host_B$ su - root@Host_B# mount -oro nfs://127.0.0.1:22049/tmp /mnt
Im Hintergrund werden dann die TunnelVerbindungen aufgebaut und man macht das PortForwarding direkt von Host_A nach Host_B. Sehr schlank und elegant.
PS: Das /dev/tcp/%h/%p ist ein BASH-Builtin wobei %h und %p von der SSH durch Host (%h) und Port (%p) ausgefüllt werden
Ausbruch aus dem Paradies
Problem: Die Umgebung in der man sich aufhält ist leider so unglücklich mit Firewalls verbaut, daß man nicht arbeiten kann. Man muß aber per SSH raus, um woanders kurz etwas zu schauen, oder zu holen. Nunja, es gibt immer einen Weg...
Vorraussetzung ist ein lokal installiertes connect, z.B. unter Ubuntu: apt-get install connect-proxy. Weiterhin braucht man einen SSH-Server, wo ein sshd auf dem Port 443 lauscht, denn die meisten Proxies wollen einen nur auf known Ports durchlassen.
Dann trägt man in der ~/.ssh/config ein:
Host ssh-via-proxy ProxyCommand connect -H proxy-server:3128 ssh-server 443
Schwuppdiwupp ist man mit ssh ssh-server auf dem SSH-Ziel, wo man hinmöchte. Natürlich kann man auf den ssh-server wieder als ProxyCommand eintragen usw. usw.
Achja... das interne Wiki...
Auch nicht schlimm, wenn das nur vom internen Netz erreichbar ist, dann fragen wir einfach via Socks-Proxy an:
user@Host_A$ ssh -C -N -T -f -D8080 interner-rechner user@Host_A$ chromium-browser --proxy-server="socks5://localhost:8080" https://wiki.intern.firma.de/ &
Die Optionen sind:
-C Requests compression <- das ist optional -N Do not execute a remote command. -T Disable pseudo-tty allocation. -f Requests ssh to go to background just before command execution. -D Local-Remote-Socks5-Proxy Port
Oder wieder via ~/.ssh/config:
Host wiki Compression yes DynamicForward 8888 RequestTTY no PermitLocalCommand yes LocalCommand chromium-browser --proxy-server="socks5://localhost:8888" https://wiki.intern.firma.de/ & Hostname interner-rechner
Und dann ssh -N -f wiki (Entsprechungen für -N und -f habe ich noch nicht gefunden).