2010-07-25 2 views
8

저는 학교용 웹 사이트를 개발하고 있습니다. 그 학교에서는 LDAP를 통해 사용자를 인증하므로 학교 사이트를 통해 동일한 작업을 수행 할 생각이있었습니다. 그 사이트에서 모든 것이 완벽하게 작동하지만 개발 중에는 그러한 솔루션이 작동하는지 테스트해야합니다. 내 변경 사항을 자주 커밋하지 않으려면 로컬 컴퓨터에서이 사이트를 테스트하고 싶지만 LDAP 연결을 위해서는 ssh 터널을 사용하고 싶습니다. 학교 네트워크에서 우리는 학교 네트워크 내부와 연결되어있는 마녀를 통해 하나의 서버를 가지고 있습니다. 주소는 phoenix.lo5.bielsko.pl입니다. 이 네트워크에는 389 및 636 포트가 열린 LDAP 서버가 있습니다. 주소는 auth.lo5입니다. SSH를 통해 auth.lo5에 액세스 할 수 없기 때문에 일부 LDAP 항목을 가져 오기 위해 연결할 수만 있습니다. 그래서, 내가 실행하여 SSH 터널을 실행하려고했습니다 다음PHP는 SSH 터널을 통해 다른 네트워크의 LDAP에 연결합니다.

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

, 나는 /etc/hostsauth.lo5127.0.0.1 가리키는 내에서 설정했습니다.

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

하지만 오류 Can't contact LDAP server 받고 있어요 : 나는 그런 방식으로 PHP에서 LDAP에 연결하고 있습니다. 내 생각에, 그 문제는 012HB의 SSH 데몬 설정이나 ldap_connect() 함수에 전달 된 인수에있을 수 있습니다. sshd_config에서 무엇을 설정해야합니까? 아니면 ldap_connect에 전달 된 인수로 작동시켜야합니까?

동일한 질문을 similar thread에 올렸지 만 아무도 내 질문에 답변하지 않았습니다.

P. 내 /etc/ssh/sshd_config에서 나는이 라인 AllowTcpForwarding yes

+0

LDAP 명령 줄 도구를 사용하는 경우 제대로 작동합니까? 'ldapwhoami -H ldaps : // auth.lo5'를 먼저 사용하십시오 - PHP는 명령 행 LDAP 유틸리티만큼 유용한 메시지를보고하지 않습니다. – Borealid

+0

@Borealid 우리 LDAP 서버는 익명으로 바인딩 할 수 없으므로'ldapwhoami -D cn = lo5-www, ou = services, dc = auth, dc = lo5 -W -H ldaps : // auth .lo5' 그리고 phoenix에 대한 대답은'dn : cn = lo5-www, ou = services, dc = auth, dc = lo5'이지만 내 데스크톱에서는'ldap_sasl_bind (SIMPLE) : LDAP 서버에 연결할 수 없습니다 (-1)' – Hfaua

+1

명령 줄 도구가 작동 할 때까지 SSH 터널이 작동하지 않습니다. 사용하고있는 명령어가 똑똑하기 때문에 (솔직히, SSH 터널링은 복잡하다!) 나는 한 가지 더 제안 만하고있다. ('ssh -L 9999 : auth.lo5.bielsko.pl : 636'처럼) 로컬 포트에 대해 비 특권 포트 (1024 이상)를 사용해보십시오. 또한 FQDN을 지정하십시오! 그래도 명령 줄 도구로 테스트하십시오. 그리고 그들이 phoenix.lo5에서 auth.lo5까지 작동하는지 확인하십시오! – Borealid

답변

0

로컬 호스트와 auth.lo5의 모든 인스턴스를 교체하십시오 : 문제가 해결되지 않으면

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

, 즉 작동하는지 확인하기 위해 SSL을 끄십시오 :

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

+0

두 가지 해결책이 작동하지 않습니다. 나는 LDAP 서버가 'localhost'가 아니라 php의 경우 'auth.lo5'에 도달 할 수 있기 때문에 ssh 명령에서 localhost가되어서는 안된다고 생각한다. 'localhost'는 피닉스를 가리 킵니다. 어쩌면 내 클라이언트 또는 서버 ssh-configs에 뭔가를 넣어야합니까? – Hfaua

1

맞다면 phoenix.lo5와 auth.lo5는 2 개의 다른 기계입니다. 그렇다면 ssh 시스템에 대한 터널을 생성 한 다음 ldap 쿼리를 올바른 시스템에 보내야합니다.

귀하의 명령 : ssh -L 636:auth.lo5:636 [email protected]은 DNS 또는/etc/hosts를 통해 auth.lo5auth.lo5으로 해결할 수있는 경우 적합합니다 (내부 IP 주소를 사용할 필요가없는 경우). 당신의 PC에 포트 636을 사용하려면

또한, 당신은 다른 사람이

Borealid

에 의해 명시된 바와 같이 (1024 위)가 높은 포트를 사용할 필요가 수퍼 유저 (루트 또는 sudo를)로 명령을 실행해야 터널이 올라 오면 쿼리를 수행하기 위해 로컬 호스트를 가리켜 야합니다.

+0

물론 'phoenix'와'auth'는 다른 기계이고 DNS를 사용하여 이름을 알아냅니다. 나는 주소가 실제 문제가 아니라고 생각한다. 나는'tcpdump'를 사용하여 터널을 통한 실제 연결이 있는지 그리고'ldapwhoami'가 패킷을 올바르게 보내고 있는지 확인했습니다. 그 결과는 혼란 스럽습니다 :'local = [tunnel] => phoenix => auth (LDAP 질의) => phoenix = [tunnel] => local', 그래서'ldapwhoami'가 정답을 주어야한다고 생각합니다. 'ldap_sasl_bind (단순) : LDAP 서버에 접속할 수 없습니다 (-1)'. 나는'phoenix'에 sudo를 가지고 1024 이하의 포트는 문제가되지 않는다고 생각합니다. 그 이상한 생각 안해? – Hfaua

+0

나는이 같은 문제에 부딪 혔습니다. 나의 현재 생각은 SSL 핸드 셰이크가 실패하고 있다는 것입니다. 로컬/etc/hosts 항목을 사용하여 호스트 이름을 가짜로 시도했지만 아직 해결되지 않았습니다. –

1

나는이 동일한 문제에 부딪쳤다.

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

당신이 비슷한 문제를 타격하고있을 수 : -d1로 실행하면 날이 오류를 보여 주었다.

나는 그것을 밖으로 실행하여 가짜 수 있었다 :

sudo hostname someserver.mydomain.com

는 SSL이 올바른 호스트로 말하고 생각하는 원인이있다.

관련 문제