2

我是 Linux-SA 服务器自动化工具环境的新手。我正在尝试sshpass按如下方式进行身份验证:

在 linux 环境中,我在终端中使用以下代码并正确获取文件列表:

sshpass -p Password ssh -o StrictHostKeyChecking=no root@localhost "ls /root" 

但是,如果我尝试按如下方式从 PHP 获取结果,它将返回一个空字符串:

shell_exec('sshpass -p Password ssh -o StrictHostKeyChecking=no root@localhost "ls /root"');
4

5 回答 5

2

如果您是第一次通过 ssh 连接到此服务器,则需要手动执行一次。因此 RSA 密钥被添加到已知主机。遇到同样的问题。这有帮助。

于 2015-12-01T17:44:55.673 回答
1

使用exec()。请记住,如果ssh失败并且您可能希望它在 php 中出现错误消息,ssh 会将其打印到 stderr,php 仅获取 stdout 并且这是空的。2>&1只需通过添加到命令的末尾将 stderr 重定向到 stdout 。正如sshpass的手册页所述,使用 -p 选项时应了解安全注意事项。

$ssh_host = "localhost";
$ssh_port = "22";
$ssh_user = "root";
$ssh_pass = "Password";
$command = "ls /root";
$connection = "/usr/bin/sshpass -p $ssh_pass /usr/bin/ssh -p $ssh_port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ssh_user@$ssh_host";
$output = exec($connection." ".$command." 2>&1");
echo "Output: $output";
于 2016-11-30T01:20:49.500 回答
0

这是 sshpass 和 apache 用户(在我的例子中是 www-data)之间的权限问题。

在 sudoers (/etc/sudoers) 中包含这一行

www-data ALL=(ALL) NOPASSWD: /usr/bin/sshpass -> 在您的系统和 Apache 用户处更改为 sshpass 位置。

并在 sshpass 之前包含“sudo”

shell_exec('sudo /usr/local/bin/sshpass -p Password ssh -o StrictHostKeyChecking=no root@localhost "ls /root"');
于 2015-01-30T20:18:06.850 回答
0

请将上述命令的输出放入某个变量中并显示该变量。例如:

$output = shell_exec('sshpass -p 密码 ssh -o StrictHostKeyChecking=no root@localhost "ls /root"');

回声$输出

这肯定会告诉你结果。

于 2013-11-08T10:28:03.133 回答
0

你在网页中调用 PHP 吗?

sshpass 在路径中吗?如何使用完整路径?

例如

shell_exec('/usr/local/bin/sshpass -p Password ssh -o StrictHostKeyChecking=no root@localhost "ls /root"');

*你需要弄清楚你的 sshpass 在哪里

此外,您可能想要调查 ssh 密钥,而不是在代码中输入这样的密码 - 这可能是一个安全问题..(实际上我不知道您在做什么,您正在 ssh 到 localhost,但也许您'只是测试?)

于 2013-09-17T07:58:51.967 回答