【问题标题】:Connecting to SSH via PHP's exec() function.通过 PHP 的 exec() 函数连接到 SSH。
【发布时间】:2010-02-16 18:27:34
【问题描述】:

我目前正试图弄清楚如何使用 PHP 的 shell 函数通过 SSH 连接到另一台服务器。我有一个站点,我必须将数据从 PHP 传递到自定义命令行程序,然后返回输出。在我使用的旧服务器上,这可以通过 exec() 函数实现:

$cmd = '/path/to/custom/program "arg1", "arg2", "arg3"';
exec($cms, $output);

当然,$output 会保存我的程序返回的数据。

我现在处于主机不允许我运行我的自定义程序的位置。但是,PHP 的 shell 函数仍然可用。主持人建议我将 PHP 设置为 SSH 到不同的服务器,运行我需要运行的命令,然后返回输出。这似乎是一种令人难以置信的倒退方式,但我知道什么?

我的具体问题涉及如何将登录信息传递给 exec() 命令。例如,当我手动连接到任何 SSH 服务器时,我输入:

ssh myserver.com -l myusername

然后我看到了:

myusername@myserver.com's password:

如果我将“ssh myserver.com -l myusername”作为命令传递给 exec(),我将如何给它密码?之后,我怎么知道我已正确验证和连接,以便我可以为我的程序运行命令?

哦,另外,我没有可以访问 PHP 中的 ssh2 函数,也无法安装该扩展。

【问题讨论】:

    标签: php ssh


    【解决方案1】:

    您可以使用密钥来解决密码问题。

    http://pkeck.myweb.uga.edu/ssh/

    【讨论】:

    • 我不需要能够对我的主要机器(PHP 脚本正在运行的机器)进行 shell 访问以执行此操作吗?那是我忘记提及的另一件事。在主服务器上没有任何 shell 访问权限。
    • 您的主服务器是执行 php 的服务器还是您通过 ssh 连接的服务器?
    【解决方案2】:

    您需要通过 PHP 代码与新进程进行双向通信 - 在这种情况下,proc_open(...) 是您可以用来运行 ssh 的唯一 php 函数。

    之后 - 只需编写代码以等待提示并响应它们。

    然而,在 phpclasses 上发布了用 PHP 编写的 ssh 实现——尽管我不知道它有多快/高效/可靠/兼容。我怀疑它不会比 proc_open() 方法少任何努力,而且可能更多。

    C.

    【讨论】:

      【解决方案3】:

      从未尝试过,但您是否考虑过 PHP 核心函数 passthru() 或 system()。

      它们类似于 exec()。

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2019-02-04
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        相关资源
        最近更新 更多