Phpseclib SFTP连接私钥和密码



是否可以通过使用phpseclib或任何其他方法将sftp与私钥和ftp密码连接起来?

SFTP服务器同时使用密码和公钥身份验证是很少见的。我猜你最有可能拥有的是密码保护的私钥。如果是这样,您可以这样登录:

<?php
include('Net/SFTP.php');
include('Crypt/RSA.php');
$sftp = new Net_SFTP('www.domain.tld');
$key = new Crypt_RSA();
$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
if (!$sftp->login('username', $key)) {
    exit('Login Failed');
}
print_r($sftp->nlist());
?>

如果你的服务器确实在做这两件事,下面应该工作:

<?php
include('Net/SFTP.php');
include('Crypt/RSA.php');
$sftp = new Net_SFTP('www.domain.tld');
$key = new Crypt_RSA();
$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
if (!$sftp->login('username', $key) && !$sftp->login('username', 'password')) {
    exit('Login Failed');
}
print_r($sftp->nlist());
?>

我会说试试密码验证本身。

这是日志中发生的事情。

phpseclib发送一个SSH_MSG_SERVICE_REQUEST到服务器,有效地说"嘿-我想要验证-那好吗?"

服务器用SSH_MSG_SERVICE_ACCEPT响应,实际上是在说"当然——把你得到的发给我!"

phpseclib然后发送一个SSH_MSG_USERAUTH_REQUEST,其中包含与您的私钥相对应的公钥,有效地说"ok -让我们用我的私钥验证-以确保您将接受它……"这个公钥在白名单中吗?"

服务器然后响应一个NET_SSH2_MSG_USERAUTH_PK_OK消息,有效地说,"是的-我们可以使用密钥-请现在用它签名服务器标识符"。

phpseclib这样做了,然后服务器就会说"没关系!我刚想起来-我做的唯一类型的认证是基于密码的认证!"

phpseclib去"meh"lol,然后发送另一个SSH_MSG_SERVICE_REQUEST,要求验证,再次,服务器是像"什么!?"你为什么要求证?"

似乎phpseclib也许不应该发送第二个SSH_MSG_SERVICE_REQUEST消息-它应该直接到SSH_MSG_USERAUTH_REQUEST -但唉,它目前没有这样做。我将尝试更新代码库来做到这一点,并将向作者提交一个pull请求。

谢谢!

最新更新