【发布时间】:2014-07-15 03:19:17
【问题描述】:
服务器不可见,它们隐藏在另一台服务器后面。为了使它们可见,您必须通过 ssh 登录到第一台服务器。一旦那里其他服务器可见,您就可以从当前服务器(您刚刚登录/ssh 进入的服务器)通过 ssh 进入它们。
我希望能够在脚本中的最后一个服务器上运行命令。
是否可以通过 SSH 连接到一台服务器,而不是通过 ssh 从我们使用 phpseclib 连接到的当前服务器连接到下一个服务器并运行命令?
在 PHP 手册页上的 ssh2 函数的 libssh2 示例中看起来是可行的,所以我希望这个库也可以。有人有类似要求吗?
谢谢。
【问题讨论】:
-
libssh2 有一个 ssh2_tunnel 函数我假设你可以断开现有连接,指定后续主机,然后你会从你的原点通过隧道到达中间框,然后是结束框(您从中间框连接到)。密码身份验证很棘手,但使用密钥进行身份验证时可行(更复杂)且更容易。
-
我认为
ssh2_tunnel函数的工作方式与您想象的不同。ssh2_tunnel允许您通过fputs()或fwrite()将未加密的数据发送到服务器。例如。你可以做fputs($tunnel, "GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n"); fread($tunnel, 1024);但你必须在 PHP 中重新实现 SSH 以使 libssh2 隧道 SSH 到 SSH。这基本上就是 PHP 所做的,因此您可以修改它以使用 ssh_tunnel。我将尝试通过演示如何在时间允许的情况下完成此操作来更新我之前的答案。 -
有道理。手动完成很容易,但不是理想的脚本。
-
它使用了 ssh2,这就是我之前在隧道功能中所说的,但是我们无法访问 Windows 机器上的 libssh2。我尝试搜索二进制文件并进行设置,但失败了,不幸的是使用带有 linux 服务器的 windows 工作站。