Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
phpseclib ssh登录失败,没有错误_Ssh_Phpseclib - Fatal编程技术网

phpseclib ssh登录失败,没有错误

phpseclib ssh登录失败,没有错误,ssh,phpseclib,Ssh,Phpseclib,这是我的密码: error_reporting(E_ALL); require __DIR__ . '/vendor/autoload.php'; use phpseclib\Net\SSH2; use phpseclib\Crypt\RSA; $ssh = new SSH2('stg.net'); $key = new RSA(); $key->loadKey(file_get_contents('/Users/me/.ssh/my_private_key')); if (!$ssh

这是我的密码:

error_reporting(E_ALL);
require __DIR__ . '/vendor/autoload.php';

use phpseclib\Net\SSH2;
use phpseclib\Crypt\RSA;

$ssh = new SSH2('stg.net');
$key = new RSA();
$key->loadKey(file_get_contents('/Users/me/.ssh/my_private_key'));
if (!$ssh->login('username', $key)) {
    print_r($ssh->getLastError());
    print_r($ssh->getErrors());
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
输出:

Array
(
)
vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php中,有
function\u privatekey\u login($username,$privatekey)

我得到了
false
,也许我也必须设置公钥?怎样才能做到呢? 如何调试它

+++更新+++

我也尝试了这些门票的建议/提示:


问题在于所讨论的密钥是ECDSA密钥。引述:

我的库支持OpenSSH格式的EdDSA密钥(即
ssh-keygen
将生成),PuTTY格式(即
puttygen
将生成),以libnaude格式和 本IETF草案中规定:

如果正在使用LibNa/Na_compat,则会转换键 从他们使用的任何格式到libnaude格式 促进利伯纳的使用

出于同样的原因,不支持加密的OpenSSH私钥 钠相容剂不支持Argon2i-速度太慢。OpenSSH使用 自定义形式的bcrypt,在我记忆和记忆中执行bcrypt 128次 加密不同的字符串等,因此PHP的bcrypt实现无法 由于bcrypt使用自定义密钥扩展OpenSSL Blowfish的实现也不能使用

在这里,作者谈论的是EdDSA——不是ECDSA——但从文章的其余部分来看,质数有限域上的ECDSA似乎也是完整的

引用下面的帖子:

另外,我还没有准备好公开我的代码。我只是想给有兴趣的人发一份进度报告


我的猜测是,这个实现将存在于主分支中,而不是2.0分支中。我之所以这么说,是因为DSA更改发生在主分支中,而不是2.0分支中。最终,主分支(据我所知)将变成3.0.0,但当这发生时,idk将变成3.0.0。

比错误更有用的是日志文件。您可以通过执行
define('NET\u SSH2\u LOGGING',2)获得它们
在顶部,然后在退出之前
$ssh->getLog()
。也就是说,根据您的
\u privatekey\u login
注释,听起来您可能试图使用DSA或ECDSA密钥来代替RSA密钥。大多数RSA私钥都包含公钥,很难想象您使用的是不包含公钥的。我的意思是,这不是不可能的,但这是不可能的。@neubert非常感谢您的评论,您是对的,我正在使用ECDSA密钥。是否仍不受支持?最近在上发布的状态更新。引用它,“我还没有准备好公开我的代码。我只是想为任何感兴趣的人发布一份进度报告。”。然而,我的猜测是代码更改将在主分支中进行,而不是在2.0分支中。我之所以这么说,是因为DSA更改发生在主分支中,而不是2.0分支中。最终主分支(据我所知)将成为3.0.0,但当这发生时,idk。感谢您的帮助,您可以将其作为答案发布&我会标记它
$publickey = $privatekey->getPublicKey(RSA::PUBLIC_FORMAT_RAW);
if ($publickey === false) {
    return false;
}