• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

ssh über proxy machbar?

A

Anonymous

Gast
Hi leutz,

Ich möchte über mein Internetgateway (openSuSE 10.2, kein routing, sondern alles läuft über proxies) mit SSH von einem Client eine Verbindung zu einem Remotehost herstellen. Z.B. so:
Code:
ssh -l benutzername remotehost

Er versucht sich zu verbinden, bleibt aber nach der Namensauflösung hängen bis der Timeout kommt.

Habe versucht das mit Dante (Socks-Proxy) zu lösen, jedoch erfolglos.
Der ist leider sehr dürftig dokumentiert, deswegen weiß ich nicht, ob ich da alles richtig gemacht habe.

Lange Rede kurze Frage:
Wie macht man sowas am besten?

Die SSH-Kommunikation im LAN (auch mit dem Gatewayhost) soll dabei natürlich nicht beinträchtigt werden, und es soll mit allen Remotehosts funktionieren (Webserver-Zugänge).

Hab' weder hier noch über Google was Passendes gefunden.

Jemand 'ne Idee?
 

nbkr

Guru
Such mal nach "corkscrew ssh" bei Google. Mit corkscrew lässt sich ein Proxy relativ bequem durchtunneln.

Nichts desto trotz hast Du aber trotzdem irgendwo was mit routing. Die Proxies alleine können schließlich auch keine Verbindung herstellen ohne korrekt aufgesetztes Routing.
 
OP
A

Anonymous

Gast
Erstmal danke für den Tip.

Leider ergeht es mir mit corkscrew genauso, wie bei dante:
Schlechte bis gar keine Doku, also ausprobiert, was ich ergoogelt hab'.
Das drehte sich in erster Linie um Einträge in der .ssh/config, wie
Host, Port, LocalForward und ProxyCommand, die ich in bester Trial&Error Manier durchexerzierte.

Das Ergebnis war im günstigsten Fall ein Verbindungsaufbau zum Remotehost, dessen Annahme verweigert und die Verbindung geschlossen wurde.

Ich denke, das sollte eigentlich mit Dante hinzukriegen sein, wenn man die richtigen ssh-Parameter kennt. Vielleicht kann das SSH sogar alleine ohne Fremdhilfe, wenn man weiß wie dieser ganze Forwarding-Kram funktioniert?

So selten kann dieses Problem doch gar nicht sein, dass keiner 'ne weitere Idee hat, oder?
 

Gimpel

Guru
Ich verwende proxytunnel.

Ist völlig simpel. Man muss dann nur eine ~/.ssh/config anlegen mit etwa folgendem inhalt:

Code:
Host gimpel.ath.cx
        ProxyCommand /usr/local/bin/proxytunnel -p proxyz.planethome.com:8080 -d gimpel.ath.cx:443

Einzige Sache ist, dass es drauf ankommt, welche Ports der Proxy durchlässt. Unserer zB erlaubt nur ftp, http und https. Deshalb musste ich sshd auf meiner Maschine zuhause auf dem https port lauschen lassen.
 
OP
A

Anonymous

Gast
Vielen Dank für eure Vorschläge.
Ich habe alle 3 Varianten umfangreich ausprobiert.

Da corkscrew und proxytunnel darauf ausgelegt sind, über http-proxies wie squid zu tunneln, und ich aus verschiedenen Gründen den sshd nicht auf anderen Ports (443) lauschen lassen will (z.B. wegen Xampp / Apache, der den auch will), habe ich vorerst diese beiden Vorschläge verworfen.

Das connect script funktioniert soweit, dass es - soweit ich es beurteilen kann - die korrekte Verbindung zum Dante-Proxy herstellt. Hier der Debug-Auszug:
Code:
ich@client.mydomain.lan:~> ssh -v gelini.de -p 22
OpenSSH_4.1p1, OpenSSL 0.9.7g 11 Apr 2005
debug1: Reading configuration data /home/ich/.ssh/config
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Executing proxy command: exec connect -d -w 120 -S proxy.mydomain.lan:1080 gelini.de 22
debug1: identity file /home/ich/.ssh/identity type -1
debug1: identity file /home/ich/.ssh/id_rsa type -1
debug1: identity file /home/ich/.ssh/id_dsa type -1
DEBUG: No direct address are specified.
DEBUG: relay_method = SOCKS (2)
DEBUG: relay_host=proxy.2pearls.lan
DEBUG: relay_port=1080
DEBUG: relay_user=ich
DEBUG: socks_version=5
DEBUG: socks_resolve=REMOTE (2)
DEBUG: local_type=stdio
DEBUG: dest_host=gelini.de
DEBUG: dest_port=22
DEBUG: Program is $Revision: 1.96 $
DEBUG: setting timeout: 120 seconds
DEBUG: resolving host by name: gelini.de
DEBUG: resolved: gelini.de (64.33.122.250)
DEBUG: not matched, addr to be SOCKSified: 64.33.122.250
DEBUG: resolving host by name: proxy.mydomain.lan
DEBUG: resolved: proxy.mydomain.lan (XXX.XXX.XXX.XX)
DEBUG: connecting to XXX.XXX.XXX.XX:1080
DEBUG: begin_socks_relay()
DEBUG: available auth method[0] = NO-AUTH (0x00)
DEBUG: available auth method[1] = USERPASS (0x02)
DEBUG: atomic_out()  [4 bytes]
DEBUG: >>> 05 02 00 02
DEBUG: atomic_in() [2 bytes]
DEBUG: <<< 05 00
DEBUG: auth method: NO-AUTH
DEBUG: atomic_out()  [16 bytes]
DEBUG: >>> 05 01 00 03 09 67 65 6c 69 6e 69 2e 64 65 00 16
DEBUG: atomic_in() [4 bytes]
DEBUG: <<< 05 06 00 03
ERROR: Got error response from SOCKS server: 6 (TTL expired).
FATAL: failed to begin relaying via SOCKS.
ssh_exchange_identification: Connection closed by remote host

IMHO ein Timeout (nach ca. 3 Minuten)

Bei Dante sieht das Log so aus:
Code:
Sep 15 15:51:18 (1189864278) sockd[14578]: created new requestchild
Sep 15 15:51:18 (1189864278) sockd[13795]: pass(4): tcp/connect [: 192.168.0.3.17545 -> gelini.de.22
Sep 15 15:51:44 (1189864304) sockd[13794]: pass(4): tcp/connect ]: 192.168.0.3.17536 -> gelini.de.22: Connection timed out

Meine Vermutungen:
  1. der Benutzername ist nicht der, mit dem ich mich beim remotehost anmelden muß. Gebe ich den richtigen wiederum beim SSH-Befehl mit an (ssh -l Benutzername Host -p Port) dauert es einfach nur länger bis der Timeout kommt, sonst ist alles genau gleich.
  2. Es braucht einen Antwortkanal der nicht definiert ist (Dante-Konfiguration), oder durch die Firewall geblockt wird

Vielen Dank für jede weitere Hilfe.
 

rolle

Guru
Zuerst stellt sich natürlich die Frage, ob der Proxy auch als Socks Proxy läuft. Falls ja, Version 4 oder 5? Versuche mal mit diesen Versionen zu probieren, ich mußte damals auf Socks 4 gehen, damit es klappte mit dem Uniproxy. Die entsprechende Zeile in der ssh_config sah so aus:
Code:
ProxyCommand /usr/bin/sconnect -4 -S PROXY-NAME:SOCKS-PORT %h %p
 
Oben