You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS PHP SDK获取Amazon EC2 Windows实例密码

使用AWS PHP SDK获取Amazon EC2 Windows服务器登录密码

前提条件

  • 已安装并配置AWS PHP SDK(确保凭证拥有ec2:GetPasswordData权限)
  • 持有目标EC2 Windows实例的实例ID
  • 拥有该实例创建时关联的私钥文件(.pem)

实现步骤

1. 初始化EC2客户端

创建EC2客户端实例,指定实例所在区域与AWS凭证(推荐通过环境变量、凭证文件或IAM角色自动加载,避免硬编码凭证):

require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;

$ec2Client = new Ec2Client([
    'region' => 'us-east-1', // 替换为你的实例所在区域
    'version' => 'latest',
    'credentials' => [
        'key' => 'YOUR_AWS_ACCESS_KEY',
        'secret' => 'YOUR_AWS_SECRET_KEY',
    ]
]);

2. 获取加密的密码数据

调用getPasswordData方法传入实例ID,获取加密后的密码信息:

$instanceId = 'i-0123456789abcdef0'; // 替换为你的实例ID

try {
    $result = $ec2Client->getPasswordData([
        'InstanceId' => $instanceId,
    ]);

    $encryptedPassword = $result['PasswordData'];
    $timestamp = $result['Timestamp'];
} catch (\Aws\Exception\AwsException $e) {
    echo "获取密码数据失败: " . $e->getMessage();
    exit;
}

注意:新创建的Windows实例需要等待Cloud-init完成密码生成,通常耗时2-5分钟,若返回空值请稍后重试。

3. 用私钥解密密码

通过OpenSSL函数解密加密后的密码:

$privateKeyPath = '/path/to/your/key.pem'; // 替换为你的私钥文件路径

// 加载私钥
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyPath));
if (!$privateKey) {
    echo "无法加载私钥文件";
    exit;
}

// 解密密码
openssl_private_decrypt(base64_decode($encryptedPassword), $decryptedPassword, $privateKey);

echo "Windows实例登录密码: " . $decryptedPassword;

常见问题

  • 权限错误:若抛出AccessDeniedException,需检查AWS凭证是否配置了ec2:GetPasswordData权限。
  • 解密失败:必须使用实例创建时指定的密钥对对应的私钥,私钥不匹配会导致解密失败。
  • 密码为空:新实例未完成初始化,等待几分钟后重试即可。

内容的提问来源于stack exchange,提问作者Sumigyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:30:55