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

使用phpseclib结合RSA密钥无法登录的问题求助

解决phpseclib密钥登录失败的问题

看起来你在把登录方式从密码切换到密钥时踩了个常见小坑——你的代码里loadKey('key')传的是字符串'key',而不是密钥文件的实际内容!这应该是导致登录失败的核心原因,下面一步步帮你修正:

1. 正确读取并加载密钥

phpseclib的loadKey()方法需要的是密钥的内容字符串,不是文件名。你需要先读取密钥文件的内容,再传给它:

<?php
include 'Crypt/RSA.php';
include 'Net/SSH2.php';

$key = new Crypt_RSA();
// 读取密钥文件内容,替换成你的密钥文件实际路径
$privateKeyContent = file_get_contents('path/to/your/private_key');
$key->loadKey($privateKeyContent);

$ssh = new Net_SSH2('srv-test');
if (!$ssh->login('user', $key)) {
    exit('Login Failed');
}

// 执行测试命令,比如查看当前登录用户
echo $ssh->exec('whoami');
?>

2. 处理带密码的密钥

如果你的私钥设置了密码(passphrase),别忘了在加载密钥前先设置密码,否则会因为解密失败导致登录失败:

// 在loadKey之前添加这行
$key->setPassword('your_key_passphrase');

3. 额外的调试和检查要点

  • 权限检查:确保PHP进程有读取私钥文件的权限,建议把私钥文件权限设为600(仅所有者可读可写),既保证安全又避免权限问题。
  • 服务器端公钥配置:确认你的公钥已经添加到目标服务器的~/.ssh/authorized_keys文件中,该文件权限也要设为600,.ssh目录权限设为700。
  • 开启错误提示:如果还是失败,开启PHP错误提示看看具体报错,能帮你更快定位问题:
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:25:19