我试图通过网站以编程方式将RSA公钥添加到authorized_keys文件中,但无法做出我认为可行的解决方案。 我尝试使用PHP的file_put_contents()函数,但是遇到权限拒绝错误,并且我有一个可以运行的python脚本,但是我似乎无法使PHP使用exec()命令或shell_exec()来执行它。 以下是相关的PHP代码:

if(@$_POST['action']=='submit'){
    $key = $_POST['key_field'];

    //file_put_contents("/home/biosproject/.ssh/authorized_keys", $key, FILE_APPEND);

    $test = "/usr/bin/python savetofile.py \"".$key."\"";
    $tmp = shell_exec($test);
}

我知道我需要清理输入内容,但是该站点目前正在开发中,因此我正在对此进行测试。 现在,我正在使用运行Apache的XAMPP。 有什么我想念或可以尝试的吗? 对于PHP exec / shell_exec,我已经尝试在命令的所有部分使用完整路径名,但是仍然没有任何效果。 python脚本如下:

#!usr/bin/python
import sys    
key = sys.argv[1]    
with open("/home/biosproject/.ssh/authorized_keys","a") as append:
    diditwork = append.write(key)
print key

正如我之前提到的,该脚本具有功能,但是我无法从PHP脚本中调用它。

编辑:

我的authorized_keys文件如下所示:
-rw-rw-rw-1 biosproject www-data 1200 Apr 15 13:17 /home/biosproject/.ssh/authorized_keys

更新:

我通过使用cron作业绕过权限来解决此问题,该作业从数据库条目中追加了必要的信息。 现在很棒!

===============>>#1 票数:0

有关我的内联代码的说明:

$text = "nice text to append :P";
// open a file handler with a+ flag that means "open file for append and if it does not exist, create it"
$fo = fopen("filename.ext", "a+");
// append $text to file handler with a \n at the end
fwrite($fo, $text . PHP_EOL);

===============>>#2 票数:0 已采纳

Python脚本在这里无济于事-这是/home/biosproject/.ssh/authorized_keys文件的权限问题,即Apache没有权限对其进行修改,也不会产生任何进程,其中包括您的Python脚本。

最简单的解决方法是更改​​文件权限,以便Apache可以写入。 假设apache作为组www-data运行,请执行以下操作:

sudo chgrp www-data /home/biosproject/.ssh/authorized_keys
sudo chmod g+w /home/biosproject/.ssh/authorized_keys

...虽然我忘记了ssh抱怨authorized_keys是否设置为g+w

更新资料

在我看来, www-data还需要+x访问/home/biosproject/.ssh/authorized_keys所有父目录才能更改它,尽管我很确定ssh如果更改ssh也会抱怨.ssh目录权限以这种方式。

您必须使用与/home/biosproject/.ssh目录的所有者相同的UID运行apache,或者使用setuid脚本进行更改。

  ask by JacobD translate from so

未解决问题?本站智能推荐:

2回复

php exec写入文件的python脚本

我需要执行在同一目录中写入文件的python脚本。 test.py: test2.py: PHP脚本: 第一个exec可以正常运行,但是第二个脚本则不能,返回var $ ret2为1。这两个命令在终端中都可以正常运行。 我猜这是一个权限问题,因为php脚本以“ n
3回复

谁拥有php exec tar提取文件?

就文件权限而言,当您使用php脚本解压缩tar文件时,谁是创建文件的“所有者”用户? 我想知道它是否是我的ftp用户,因为我上传了脚本文件? 或者apache拥有该文件? 我知道他们的标志是为了保留我不想要的原始权限(由其他人创建和存档的文件)。 我希望我的用户成为文件的创建者/所有
2回复

PHP Exec()函数在Windows Server 2003 R2中不起作用

您能否告诉我如何在Windows Server 2003 R2上运行exec()命令。 我试图运行Subversion可执行文件,但是php不断返回空数组而不是输出。 我已经设置了以下权限: 命令文件 system32文件夹 subversion / bin文件夹
1回复

PHP + Apache的SUID问题

好的,不确定我在这里缺少什么。 我正在尝试使用可通过Web访问的PHP脚本重命名某些文件,而不给这些文件提供世界各地的写权限。 因此,我尝试在PHP脚本上使用SUID(也尝试了Shell脚本)。 共有三个用户,我们将它们称为APACHE,MATT和BRIAN。 还有一个名为WEBDE
2回复

在php中使用exec命令不起作用

我必须使用php来自动化过程,在其中必须将内容附加到文件中。 该文件没有指定任何特定的权限,但是文件夹'abc'具有只读权限,因此当我尝试附加文件时,fopen()会提示拒绝权限。 但是我可以手动编辑文件,也可以从命令提示符下编辑文件。 所以我尝试了以下方法: 当我尝试echo
2回复

C - execl():无法执行位于另一个目录中的文件

我正在尝试使用我的程序notify.c执行位于另一个目录中的名为“helloworld”的二进制文件(从source.c编译)。 这是我的文件所在的位置: /家庭/ morts /桌面/的HelloWorld /家庭/ morts /桌面/家庭作业/通知 我尝试过:
1回复

PHP在子文件夹中执行脚本

我的网站运作方式遇到了一个小问题。 我有一个要从index.php页面运行的python脚本。 现在,如果此脚本位于根目录中,则可以使用以下命令轻松执行该脚本: 实际上,这将运行python脚本并执行所需的操作。 但是,我计划再增加一些脚本,并希望保持根目录尽可能的干净,因此我想知
1回复

如何从Python文件传递PHP中的变量?

我正在尝试在PHP文件中调用Python脚本,并在按下Submit按钮之后从该脚本传递变量值。 我有: index.php test.py 这两个文件都在同一文件夹中。 为什么不起作用? 我想在没有Flask / Django的情况下执行此操作。
2回复

PHP可执行文件将在命令行中运行,但不会在浏览器中运行

因此,使用“ php index.php”会在命令行中提供所需的输出。 但是不会在网页上给出输出。 所以首先我有这个python文件,基本上可以完成我想要的一切: 其次,我只有一个sh可执行文件,它将将此python命令的输出放入另一个文本文件: 然后,我将Raspberry
2回复

exec python中的php问题

在php代码中exec('python file.py 1 2',$result); $ result给我在file.py中的代码,但是我需要print的输出。 假设file.py做额外的工作。 而不是var_dump($result) -> 3 当使用exec('p