5

我知道这个问题以前曾以许多不同的方式被问过,但我仍然在为为什么我不能让它工作而摸不着头脑。

首先,我设置了两台 SLES 服务器,它们是服务器 A 和服务器 B,它们都在一个小型专用网络上运行,只有专门的团队才能访问。

服务器 A 配置为运行 Apache、PHP、MYSQL 和 ssh 的 Web 服务器,所有这些都运行无问题。

服务器 B 用于运行安装并激活了 ssh 的琐碎任务。

我在服务器 A 上创建了我的 rsa 密钥并将其安装在服务器 B 上,当在命令行运行时,我会立即登录,而无需输入密码。我已经为服务器 A 上的 root 和nobody 帐户重复了这个过程。

我已将此 PHP 页面添加到服务器 A,如下所示:

<?php
shell_exec('ssh root@192.162.0.5 ./StartTest.sh');

header("Location: archive.php?page=home"); 
?>

但是当我运行它时,它不会创建我的文件夹。如果我从命令行运行它,它适用于两者(我认为两者都适用,我不记得我是否确实为cli上的nobody帐户尝试过这个)root和nobody帐户。我什至将nobody 帐户添加到root 组,但仍然没有乐趣。

我在这里错过了什么吗。我想做的就是通过 php & ssh 从服务器 A 连接到服务器 B 以执行一个命令并重定向到网站上的另一个页面。

由于我的扑热息痛库存不足,我们将不胜感激任何帮助。

4

3 回答 3

9

George Cummins 所说的内置 SSH 支持是不存在的。它是默认情况下不包含的 PHP 扩展。它必须单独编译,并且众所周知难以设置/使用。我的建议是使用phpseclib,一个纯 PHP SSH 实现

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
于 2011-10-13T03:34:23.270 回答
2

你说“我已经添加了这个 PHP 页面”,所以我假设你是通过你的 web 服务器执行这个脚本,而不是作为一个独立的脚本。

因此,脚本可能不在您期望的目录中运行。您应该使用绝对(而不是相对)路径来确保脚本找到ssh二进制文件和您的脚本:

shell_exec('/path/to/ssh root@192.162.0.5 /home/yourdirectory/scripts/StartTest.sh');

您还需要确认网络服务器用户有权执行 ssh 和 StartTest.sh 脚本。

于 2011-10-12T18:41:10.820 回答
2

我知道我在这个答案上为时已晚,但也许可以帮助某人:

要使用shell_exec并且ssh您需要将其作为参数添加到ssh这些

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet

因此,该命令不会尝试创建 .ssh 文件夹,并且您有一个清晰的输出而没有日志ssh

于 2015-03-05T10:07:04.740 回答