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;
}