【问题标题】:phpseclib - SSH_AUTH_SOCK not foundphpseclib - 未找到 SSH_AUTH_SOCK
【发布时间】:2015-05-31 20:13:36
【问题描述】:

我与另一家正在从常规 FTP 迁移到 SFTP 以进行连接的公司合作。他们告诉我,我现有的用户名和密码是相同的,但我现在需要通过端口 22 上的 SFTP 连接。我有几个 PHP 脚本可以做一些基本的事情,比如连接到他们的网站,获取目录列表,并每天上传和下载一个文件。这些在 FTP 上都可以正常工作,所以我只需要将协议换成 SFTP。

在做了一些研究之后,似乎一致认为 phpseclib 是使用 PHP 执行 SFTP 的最简单和最强大的方法。我的服务器正在运行 Linux 和 Apache。我下载了该库并尝试仅运行 phpseclib 给出的基本示例,但出现错误:

注意:在第 244 行的 System/SSH/Agent.php 中找不到 SSH_AUTH_SOCK

当我查看 Agent.php 时,我看到脚本正在寻找要在 $_SERVER$_ENV 中定义的 SSH_AUTH_SOCK。我一定遗漏了一些明显的东西,但我不知道如何克服这个错误。

【问题讨论】:

    标签: sftp phpseclib ssh-agent


    【解决方案1】:

    您正在尝试连接到 SSH 身份验证代理 (ssh-agent)。

    代理运行时,它会导出SSH_AUTH_SOCK 环境变量。

    在你的情况下显然没有发生什么。

    但你没有告诉我们,你为什么要尝试使用代理,如果有的话。你做了什么来设置它,如果有的话。所以很难给你更具体的建议。

    另见How is SSH_AUTH_SOCK setup and used by ssh-agent?

    【讨论】:

    • 我只是尝试使用 ssh-agent,因为我认为它是执行 sftp 会话所必需的。如果我理解正确,sftp 会在 ssh 进程之上运行。在您的链接和此页面的帮助下,我取得了一些进展; blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add 。我现在创建了一个 shell 脚本,它运行 'eval $(ssh-agent)' 来启动进程并将缺少的环境变量添加到会话中,然后它运行我的 php 脚本,最后是一个 ps 命令来终止 ssh- php脚本完成后的代理进程。
    • 不,SSH 和 SFTP 都不需要 ssh-agent。这是一种简化频繁交互式身份验证的方法。它通常不指定用于自动化。
    • @Bill Smith - ssh-agent 进程不是您每次加载页面时都应该启动和停止的东西。这就像启动 mysql-server 并在每次页面加载后停止它。它旨在在后台连续运行。
    • 我现在明白了。我的错误是使用安装附带的示例,这些示例侧重于使用 ssh,而不是 sftp。我在这里找到了与 sftp 相关的示例:phpseclib.sourceforge.net/sftp/intro.html,我现在可以使用它,并且根本没有使用 ssh-agent。感谢您的所有帮助。
    【解决方案2】:

    运行下面的命令:

    评估ssh-agent -s

    对我来说很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多