使用php SSH连接到亚马逊服务器

nc1teljy  于 2023-02-21  发布在  PHP
关注(0)|答案(1)|浏览(158)

我需要我的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函数/语法有问题,但是是什么呢?
谢谢。

g0czyy6m

g0czyy6m1#

看起来您正在尝试使用私钥与PHP建立SSH连接。在PHP中使用SSH时出现“登录失败”的最常见原因是私钥文件或目标服务器的权限问题。
以下是一些需要检查的事项:
请确保您的私钥文件的文件权限设置为400或600,这意味着只有所有者可以读取或写入该文件。您可以在终端中使用chmod命令设置权限。
仔细检查私钥文件是否存在于您试图从中访问该文件的目录中。
检查用户名和主机名是否正确。如果您使用的是Amazon EC2(2)示例,请确保您使用的用户名正确(对于Amazon Linux,用户名通常为ec2-user)。
确保目标服务器允许从运行PHP代码的服务器的IP地址进行SSH连接。
下面是使用了ssh 2扩展的代码的更新版本,ssh 2扩展是PHP中的内置扩展,不需要任何外部库:

<?php
$host = 'ec2-xx-xx-xx-xxx.us-west-2.compute.amazonaws.com';
$username = 'ec2-user';
$key_file = '/path/to/SRF.pem';

$connection = ssh2_connect($host, 22);
ssh2_auth_pubkey_file($connection, $username, $key_file . '.pub', $key_file);

if (!$connection) {
    exit('Login Failed');
} else {
    $stream = ssh2_exec($connection, 'ls -al');
    stream_set_blocking($stream, true);
    $output = stream_get_contents($stream);
    echo $output;
}
?>

这段代码将使用SSH和指定的私钥连接到远程服务器,并在远程服务器上执行ls -al命令,将输出返回到PHP脚本。请确保将$host$username$key_file变量替换为适合您的环境的值。

相关问题