【发布时间】:2019-12-25 13:34:59
【问题描述】:
首先,下面的代码测试适用于我尝试的第一个 pem 文件,但是当我尝试另一个 pem 文件时它失败了。我更改了权限,现在我无法使用 file_get_content 读取任何 pem 文件。
我的目标是将 pem 文件加载到 php 中,以便与远程的 phpseclib 一起使用。所有过程都适用于我的本地开发盒(在 Windows 上),但不适用于 ubuntu 盒。使用 stat、file_exists 和 is_readable 也都返回 false。我的假设是我的权限都错了,但是让它们正确却碰壁了。值得注意的是,我在 rsync 命令中包含了指向 pem 文件的相同路径,这是可行的。
我尝试使用 chmod 和 777、755、600、644、666 都没有工作。我尝试使用 www-data:me me:me www-data:www-data 和 me:www-data 进行 chown
文件位于 .ssh 文件夹中,用户 me:me 的权限为 0700
如果我执行 nano 并粘贴文件名(即 sudo nano /home/me/.ssh/the_pem_file.pem 然后我可以查看内容),则确定的文件存在
use phpseclib\Crypt\RSA;
$path = $_POST['path'];
if (!$GLOBALS['cygwin']) {
$new_path = str_replace( '~', '/home/me', $path ); //Dev Windows
} else {
$new_path = str_replace( '~', 'C:/Users/Me', $path ); // Live Linux
}
clearstatcache();
$exists = file_exists( $new_path );
$is_readable = is_readable( $new_path );
if ( $exists || $is_readable) {
$perms = decoct( fileperms( $new_path ) & 0777 );
if ( $perms == 0600 ) {
//Not implemented test
}
$key = new RSA();
$pub = file_get_contents($new_path);
if ($key->load($pub)) {
$sshPass = $key;
} else {
var_dump($pub);
var_dump($key);
die($path);
}
...........
} else {
$pub = file_get_contents($new_path);
var_dump( $pub );
var_dump( stat( $new_path ) );
var_dump( $new_path );
var_dump( $exists );
var_dump( $is_readable );
}
网页上的输出是
{removed path}:boolean false
{removed path}:boolean false
{removed path}:string '/home/me/.ssh/the_pem_file.pem' (length=??)
{removed path}:boolean false
{removed path:boolean false
正如所指出的,这正在使用我的一个 pem 文件,但在我更改权限之前不能使用另一个。现在都不管用。权限最初是 600 和 www-data:me ,但这不再有效。
请注意,我在测试之前使用了 clearstatcache(),并且我在代码的错误部分中仔细检查了加载文件,以防万一它确实在工作,但 file_exists 返回 false 作为误报。
在这方面花费的时间太长,因此我们将不胜感激任何帮助指导或建议。我还查看了这里有类似问题的其他帖子,但似乎没有一个适合我的场景(最常用的 url 或相对于 doc root 的路径,我的理解是首选完整路径)
谢谢
克雷格
【问题讨论】:
-
您没有更改
.ssh文件夹本身的权限吗?glob("/home/me/.ssh/*")返回什么? -
我想我改变了 .ssh 文件夹,同时试图在这个线程之前让它工作。尽管 glob 返回了一个空数组,但您却击中了它的头部。我使用 sudo chown www-data .ssh 设置了权限,现在似乎正在按预期添加 pem 文件。我将检查主要脚本现在是否正常工作。
-
修改 .ssh 文件后,我现在无法在此服务器上执行 git pull。我读到 .ssh 中文件的权限具有特定权限,即 id_rsa.pub 为 644,其余为 0600 我目前拥有 chown,因为 www-data:me git 可以工作,如果这是我:我现在完全迷路了。当然它不能与 git 或我的脚本一起使用?我还应该提到我在 var/www/.ssh 中具有与符号链接相同的键,这些键设置为 777(似乎无法更改)
标签: php ssh-keys phpseclib file-exists