【问题标题】:PHP connect via SSH tunnel to LDAP in other networkPHP 通过 SSH 隧道连接到其他网络中的 LDAP
【发布时间】:2011-03-20 17:55:46
【问题描述】:

我正在为我的学校开发网站。在那所学校,我们通过 LDAP 对用户进行身份验证,因此有一个想法通过学校站点来做同样的事情。在那个网站上,一切都运行良好,但在开发过程中,我需要经常测试这种解决方案是否有效,或者不是。为了不经常提交我的更改,我想在我的本地计算机上测试这个站点,但是为了连接 LDAP,我想使用 ssh 隧道。在学校网络中,我们通过与学校网络内部连接的女巫拥有一台服务器。它的地址是phoenix.lo5.bielsko.pl。在这个网络中,我们有 LDAP 服务器,开放了 389 和 636 端口。它的地址是auth.lo5。我无法通过 SSH 访问auth.lo5,我只能连接它以获取一些 LDAP 条目。所以,我尝试通过运行来运行 SSH 隧道:

ssh -L 636:auth.lo5:636 hfaua@phoenix.lo5.bielsko.pl

然后,我在我的/etc/hosts 中设置了auth.lo5 指向127.0.0.1。我以这种方式连接到 PHP 中的 LDAP:

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

但我收到错误 Can't contact LDAP server。我认为,这个问题可能出在phoenix.lo5.bielsko.pl 的 SSH 守护程序配置中或传递给ldap_connect() 函数的参数中。你能告诉我,我应该在 sshd_config 或传递给ldap_connect 的参数中设置什么来让它工作吗?

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

附:在我的/etc/ssh/sshd_config 我有行AllowTcpForwarding yes

【问题讨论】:

  • 如果您使用 LDAP 命令行工具,它们是否有效?首先尝试使用ldapwhoami -H ldaps://auth.lo5 - PHP 报告的有用消息不如命令行 LDAP 实用程序那么多。
  • @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): Can't contact LDAP server (-1)
  • 在命令行工具正常工作之前,您的 SSH 隧道尚未启动。由于您使用的命令是即时的(老实说,我印象深刻您知道如何做到这一点 - SSH 隧道很复杂!),我只有一个建议。尝试为本地端口(如ssh -L 9999:auth.lo5.bielsko.pl:636)使用非特权端口(高于 1024)。还要指定一个 FQDN!不过,使用命令行工具进行测试。并确保它们从 phoenix.lo5 到 auth.lo5 工作!

标签: php ssh ldap tunneling


【解决方案1】:

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

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

另外,如果你想在你的电脑上使用 636 端口,你需要以超级用户(root 或使用 sudo)运行你的命令,否则你需要使用 Borealid 规定的高端口(1024 以上)

隧道开通后,您必须指向 localhost 才能进行查询

【讨论】:

  • 当然phoenixauth 是不同的机器,我们使用我们的DNS 来解析其名称。我认为,地址在这里不是真正的问题。我使用tcpdump 来检查是否有通过隧道的真实连接以及ldapwhoami 是否正确发送数据包。结果令人困惑:local =[tunnel]=> phoenix => auth (LDAP querying) => phoenix =[tunnel]=> local,所以我认为ldapwhoami 应该给出正确答案,但我得到错误ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)。我在phoenix 上有sudo,所以我认为1024 以下的端口没有问题。你不觉得很奇怪吗?
  • 我遇到了同样的问题。我目前的想法是 SSL 握手失败。我尝试使用本地 /etc/hosts 条目来伪造主机名,但这还没有成功。
【解决方案2】:

我遇到了同样的问题。使用-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 认为它正在与正确的主机通信。

【讨论】:

    【解决方案3】:

    我也收到了错误hostname (mylaptop.local) does not match common name in certificate (*.mydomain.com)。但是我不想编辑我的机器的主机名以匹配 LDAP 服务器的主机名。相反,我编辑了 hosts 文件(Linux 上的etc/hosts)文件,添加了一行拦截对 LDAP 服务器的请求,例如:

    127.0.0.1 ldap.server.com
    

    这有一个额外的好处,即不需要您在代码中更改要尝试连接的服务器名称,如果您选择了不同的端口,则只需更改端口号。

    【讨论】:

      【解决方案4】:

      尝试用 localhost 替换所有 auth.lo5 实例:

      ssh -L 636:localhost:636 hfaua@phoenix.lo5.bielsko.plldap_connect('ldaps://localhost', 636);

      如果这不起作用,请尝试关闭 SSL 以查看是否有效:

      ssh -L 389:localhost:389 hfaua@phoenix.lo5.bielsko.plldap_connect('localhost', 389);

      【讨论】:

      • 两种解决方案都不起作用。我认为,它不应该是 ssh 命令中的 localhost,因为 phoenix 不是通过 'localhost' 而是通过 'auth.lo5' 可以访问 LDAP 服务器。 'localhost' 指向凤凰。也许我必须向我的客户端或服务器 ssh-configs 放一些东西?
      猜你喜欢
      • 2021-11-13
      • 2012-03-20
      • 2010-11-17
      • 2021-02-15
      • 2018-10-06
      • 2016-02-04
      • 1970-01-01
      • 2012-06-19
      • 2014-07-20
      相关资源
      最近更新 更多