2010-07-25 112 views
8

我正在为我的学校开发网站。在那所学校,我们通过LDAP验证用户,所以有一个想法可以通过学校网站进行。在那个网站上,一切都很完美,但是在开发过程中,我经常需要测试这样的解决方案是否有效,而不是。为了不经常提交我的更改,我想在本地计算机上测试此网站,但为了连接LDAP,我想使用ssh隧道。在学校网络中,我们有一台通过女巫的服务器,我们正在与我们的学校网络内部进行连接。它的地址是phoenix.lo5.bielsko.pl。在这个网络内部,我们有LDAP服务器,打开了389和636个端口。它的地址是auth.lo5。我无法通过SSH访问auth.lo5,我只能使用它连接以获取一些LDAP条目。所以,我试图通过运行运行SSH隧道:PHP通过SSH隧道连接到其他网络中的LDAP

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

然后,我在/etc/hostsauth.lo5指向127.0.0.1已设置。我连接到LDAP在PHP这样的方式:

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

但我发现了错误Can't contact LDAP server。我认为,这个问题可能在phoenix.lo5.bielsko.pl的SSH守护进程配置中或传递给ldap_connect()函数的参数上。你能告诉我,我应该在sshd_config或传递给ldap_connect的参数中设置它以使其工作?

我在similar thread中发布了相同的问题,但没有人回答我的问题。

P.S.在我/etc/ssh/sshd_config我行AllowTcpForwarding yes

+0

如果您使用LDAP命令行工具,它们是否工作?首先尝试使用'ldapwhoami -H ldaps:// auth.lo5' - PHP不报告与命令行LDAP实用程序一样多的有用信息。 – Borealid 2010-07-25 15:47:59

+0

@Borealid,我们的LDAP服务器不允许匿名绑定,所以我输入了'ldapwhoami -D cn = lo5-www,ou = services,dc = auth,dc = lo5 -W -H ldaps:// auth .lo5'和凤凰答案是'dn:cn = lo5-www,ou = services,dc = auth,dc = lo5',但是在我的桌面上其'ldap_sasl_bind(SIMPLE):无法联系LDAP服务器(-1 )' – Hfaua 2010-07-25 16:23:33

+1

在命令行工具工作之前,你的SSH隧道没有启动。由于你使用的命令是专用的(并且,老实说,我印象深刻*你知道如何做到这一点 - SSH隧道很复杂!),我只有一个建议。尝试使用本地端口的非特权端口(高于1024)(例如,'ssh -L 9999:auth.lo5.bielsko.pl:636')。还要指定一个FQDN!不过,使用命令行工具进行测试。并确保他们从phoenix.lo5工作到auth.lo5! – Borealid 2010-07-25 23:51:37

回答

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

这两种解决方案都不起作用。我认为,它不应该是ssh命令中的localhost,因为phoenix的LDAP服务器不是'localhost'而是'auth.lo5'。 'localhost'指向凤凰。也许我必须把一些东西给我的客户端或服务器ssh-configs? – Hfaua 2010-07-25 15:53:24

1

如果我知道了phoenix.lo5和auth.lo5是两台不同的机器。 如果是这样,你必须创建一个到ssh机器的隧道,然后将ldap查询发送到正确的机器。

您的命令:ssh -L 636:auth.lo5:636 [email protected]是正确的,如果phoenix.lo5.bielsko.pl可以通过DNS或/ etc/hosts解析auth.lo5,如果不是,您需要使用其内部IP地址。

另外,如果你想使用端口636在PC上,你需要超级用户(root或使用sudo)运行命令否则你需要使用一个高端口(1024以上)由Borealid

声明一旦隧道启动,您必须指向本地主机来执行查询

+0

当然'phoenix'和'auth'是不同的机器,我们使用我们的DNS来解析它的名字。我认为,地址在这里并不是真正的问题。我用'tcpdump'来检查是否有通过隧道的真实连接,以及'ldapwhoami'是否正确发送数据包。结果令人困惑:'local = [tunnel] => phoenix => auth(LDAP querying)=> phoenix = [tunnel] => local',所以我认为'ldapwhoami'应该给出正确的答案,但是我会遇到错误'ldap_sasl_bind(SIMPLE):无法联系LDAP服务器(-1)'。我有'phoenix'上的sudo,所以1024下的端口不是问题,我想。你不觉得它奇怪吗? – Hfaua 2010-07-27 17:27:13

+0

我遇到了同样的问题。我目前的想法是SSL握手失败。我尝试使用本地/ etc/hosts条目来伪造主机名,但尚未解决。 – 2015-01-13 21:32:19

1

我遇到了同样的问题。与-d1运行表明我这个错误:

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

可能是你打的是一个类似的问题。

我能伪造它运行:

sudo hostname someserver.mydomain.com

造成SSL假设它是说给正确的主机。