2010-07-25 14 views
8

Ich entwickle Website für meine Schule. In dieser Schule authentifizieren wir Benutzer über LDAP, also gab es eine Idee, das gleiche über die Schule zu tun. Auf dieser Seite läuft alles perfekt, aber während der Entwicklung muss ich sehr oft testen, ob eine solche Lösung funktioniert, oder nicht. Um meine Änderungen nicht so oft zu begehen, möchte ich diese Seite auf meinem lokalen Computer testen, aber für die Verbindung mit LDAP möchte ich ssh tunnel verwenden. Im Schulnetzwerk haben wir einen Server durch den wir mit unserem Schulnetzwerk verbunden sind. Die Adresse lautet phoenix.lo5.bielsko.pl. In diesem Netzwerk haben wir einen LDAP-Server mit geöffneten 389 und 636 Ports. Die Adresse lautet auth.lo5. Ich habe keinen Zugriff auf auth.lo5 über SSH, ich kann nur mit ihm verbinden, um einige LDAP-Einträge zu bekommen. Also, ich habe versucht, SSH-Tunnel laufen, indem Sie:PHP über SSH-Tunnel mit LDAP in anderen Netzwerk verbinden

ssh -L 636:auth.lo5:636 [email protected] 

Dann habe ich gesetzt in meinem /etc/hosts dass auth.lo5 zeigt auf 127.0.0.1. Ich bin eine Verbindung zu LDAP in PHP in einer solchen Art und Weise:

ldap_connect('ldaps://auth.lo5', 636); 

Aber ich bin immer Fehler Can't contact LDAP server. Ich denke, dieses Problem könnte auf phoenix.lo5.bielsko.pl in seiner SSH-Daemon-Konfiguration oder in Argumenten an ldap_connect() Funktion übergeben werden. Können Sie mir sagen, was ich in sshd_config oder in Argumenten setzen sollte, die an ldap_connect übergeben werden, damit es funktioniert?

Ich habe die gleiche Frage in similar thread geschrieben, aber niemand hat meine Frage beantwortet.

P.S. In meinem /etc/ssh/sshd_config habe ich Linie AllowTcpForwarding yes

+0

Wenn Sie die LDAP-Befehlszeilentools verwenden, funktionieren sie? Verwenden Sie zuerst 'ldapwhoami -H ldaps: // auth.lo5' - PHP meldet nicht so viele hilfreiche Nachrichten wie die Befehlszeilen-LDAP-Dienstprogramme. – Borealid

+0

@Borealid, unser LDAP-Server erlaubt kein anonymes Binding, also habe ich 'ldapwhoami -Dcn = lo5-www, ou = dienste, dc = auth, dc = lo5 -W -H ldaps: // auth eingegeben .lo5' und auf Phoenix Antwort ist 'dn: cn = lo5-www, ou = Dienste, dc = auth, dc = lo5', aber auf meinem Desktop seine' ldap_sasl_bind (SIMPLE): Kann LDAP Server nicht kontaktieren (-1) ' – Hfaua

+1

Bis die Befehlszeilentools funktionieren, ist Ihr SSH-Tunnel nicht aktiv. Da der Befehl, den Sie verwenden, genau richtig ist (und, ehrlich gesagt, ich bin * beeindruckt * Sie wissen, wie man das macht - SSH-Tunneling ist kompliziert!), Habe ich nur einen weiteren Vorschlag. Versuchen Sie einen unprivilegierten Port (höher als 1024) für den lokalen Port zu verwenden (wie in 'ssh -L 9999: auth.lo5.bielsko.pl: 636'). Geben Sie auch einen FQDN an! Testen Sie dennoch mit den Befehlszeilentools. Und stellen Sie sicher, dass sie von phoenix.lo5 bis auth.lo5 funktionieren! – Borealid

Antwort

0

Versuchen Sie alle Instanzen von auth.lo5 mit localhost ersetzen:

ssh -L 636:localhost:636 [email protected] und ldap_connect('ldaps://localhost', 636);

Wenn das nicht funktioniert, versuchen Sie SSL ausschalten, um zu sehen, ob das funktioniert:

ssh -L 389:localhost:389 [email protected] und ldap_connect('localhost', 389);

+0

Beide Lösungen funktionieren nicht. Ich denke, es sollte in SSH-Befehlen nicht localhost sein, da der LDAP-Server für Phoenix nicht von 'localhost', sondern 'auth.lo5' erreichbar ist. "localhost" verweist auf Phoenix. Vielleicht muss ich etwas auf meinen Client oder Server ssh-configs legen? – Hfaua

1

Wenn ich es richtig verstanden habe, sind phoenix.lo5 und auth.lo5 zwei verschiedene Maschinen. Wenn dies der Fall ist, müssen Sie einen Tunnel für die SSH-Maschine erstellen und dann die LDAP-Abfragen an die richtige Maschine senden.

Ihr Befehl: ssh -L 636:auth.lo5:636 [email protected] ist richtig, wenn phoenix.lo5.bielsko.pl kann auth.lo5 über DNS oder/etc/Hosts auflösen, wenn nicht müssen Sie seine interne IP-Adresse verwenden.

Auch wenn Sie Port 636 auf Ihrem PC verwenden möchten, müssen Sie Ihren Befehl als Superuser (root oder mit sudo) laufen Sie sonst einen hohen Port verwenden müssen (über 1024), wie sie Borealid angegeben

Sobald der Tunnel ist, müssen Sie auf localhost zeigen, um die Abfragen zu tun

+0

Natürlich sind 'Phönix' und' Auth' verschiedene Maschinen und wir benutzen unseren DNS, um die Namen aufzulösen. Ich denke, Adressen sind hier kein wirkliches Problem. Ich habe 'tcpdump' verwendet, um zu überprüfen, ob es tatsächlich eine Verbindung durch den Tunnel gibt und ob' ldapwhoami' Pakete korrekt sendet. Das Ergebnis war verwirrend: 'local = [tunnel] => phoenix => auth (LDAP-Abfrage) => phoenix = [tunnel] => local', also denke ich, dass' ldapwhoami' richtige Antwort geben sollte, aber ich bekomme Fehler 'ldap_sasl_bind (SIMPLE): Kann den LDAP-Server (-1) nicht erreichen'. Ich habe Sudo auf 'Phoenix', so dass Ports unter 1024 kein Problem sind, denke ich. Denkst du nicht, es ist komisch? – Hfaua

+0

Ich stoße auf dasselbe Problem. Mein aktueller Gedanke ist, dass der SSL-Handshake fehlschlägt. Ich habe versucht, einen lokalen/etc/hosts-Eintrag zu verwenden, um den Hostnamen zu fälschen, aber das hat noch nicht geklappt. –

1

Ich lief in das gleiche Problem. Laufen mit -d1 zeigte mir diesen Fehler:

TLS: hostname (mylaptop.local) does not match common name in certificate (*.mydomain.com). TLS reverse lookup of 'localhost' is 'mylaptop.local', checking if that matches the certificate common name

Könnte man ein ähnliches Problem treffen sind.

Ich war durch Laufen zu fälschen es aus der Lage:

sudo hostname someserver.mydomain.com

die SSL wurde im Gespräch mit dem richtigen Host zu übernehmen verursacht.