通过PHP exec()函数连接SSH。

时间:2010-02-16 18:27:34

标签: php ssh

我目前正试图弄清楚如何使用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函数,也无法安装该扩展。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

之后 - 只需编写代码来等待提示并回复它们。

然而,在phpclasses中发布了用PHP编写的ssh实现 - 虽然我不知道它有多快/高效/可靠/兼容。我怀疑它不会比proc_open()方法更省力,而且还可能更多。

下进行。

答案 2 :(得分:0)

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

它们类似于exec()。