我需要我的php网站访问一个远程亚马逊服务器,并远程执行脚本,返回它的输出。
所以我已经搜索了一个解决方案,我下载了php seclib并编写了以下PHP代码:
<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('SRF.pem'));
$ssh = new Net_SSH2('ec2-xx-xx-xx-xxx.us-west-2.compute.amazonaws.com');
if (!$ssh->login('ec2-user', $key)) {
exit('Login Failed');
}
else
exit('Good');
?>
问题是:php返回"登录失败"。
pem文件具有读权限(sudo chown 0400 SRF. pem),它位于上面PHP文件的同一目录中,我还成功地使用linux shell远程连接到服务器(但我需要它在PHP上工作)。
ssh -i SRF.pem ec2-xx-xx-xx-xxx.us-west-2.compute.amazonaws.com -o LocalCommand="sudo su"
所以我的猜测是我使用的php函数/语法有问题,但是是什么呢?
谢谢。
1条答案
按热度按时间g0czyy6m1#
看起来您正在尝试使用私钥与PHP建立SSH连接。在PHP中使用SSH时出现“登录失败”的最常见原因是私钥文件或目标服务器的权限问题。
以下是一些需要检查的事项:
请确保您的私钥文件的文件权限设置为400或600,这意味着只有所有者可以读取或写入该文件。您可以在终端中使用chmod命令设置权限。
仔细检查私钥文件是否存在于您试图从中访问该文件的目录中。
检查用户名和主机名是否正确。如果您使用的是Amazon EC2(2)示例,请确保您使用的用户名正确(对于Amazon Linux,用户名通常为ec2-user)。
确保目标服务器允许从运行PHP代码的服务器的IP地址进行SSH连接。
下面是使用了ssh 2扩展的代码的更新版本,ssh 2扩展是PHP中的内置扩展,不需要任何外部库:
这段代码将使用SSH和指定的私钥连接到远程服务器,并在远程服务器上执行
ls -al
命令,将输出返回到PHP脚本。请确保将$host
、$username
和$key_file
变量替换为适合您的环境的值。