【问题标题】:Is it possible to 'ssh chain' with phpseclib?是否可以使用 phpseclib 进行“ssh 链”?
【发布时间】: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。我将尝试通过演示如何在时间允许的情况下完成此操作来更新我之前的答案。
  • 有道理。手动完成很容易,但不是理想的脚本。
  • 试试这个:pastebin.com/aTJ48HPH
  • 它使用了 ssh2,这就是我之前在隧道功能中所说的,但是我们无法访问 Windows 机器上的 libssh2。我尝试搜索二进制文件并进行设置,但失败了,不幸的是使用带有 linux 服务器的 windows 工作站。

标签: ssh phpseclib


【解决方案1】:

你可以做$ssh->exec("ssh user@domain.tld 'ls -l'");。我认为即使使用 libssh2,您也不能做更多的事情。如果可以,您能否更新您的原始帖子以包含示例?

【讨论】:

  • 我可以试一试,但它可能无法满足终端所需的某些交互的需求,这也需要在 ssh/login 之后运行每个命令,这并不理想.我用关于 libssh2 的 ssh2_tunnel 的评论更新了我的帖子,它可以通过该库实现,我认为 PHP 手册页有示例。
  • 所以使用 ;添加多个命令?那么仅授权用户/通行证或者我也可以使用密钥呢?
  • 对于 SSH 的身份验证,您可以使用 sshpass 或此处建议的任何方法:stackoverflow.com/a/16734873/569976。适当的 .ssh\id_rsa 文件中的公钥(具有适当的权限)也应该可以解决问题。
猜你喜欢
  • 2014-08-27
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 2011-06-08
  • 2019-06-18
  • 2020-07-22
  • 1970-01-01
相关资源
最近更新 更多