2013-04-03 156 views
1

有没有办法通过使用phpseclib或任何其他方法连接sftp与私钥和ftp密码。phpseclib sftp连接私钥和密码

+0

您能向我们展示更多关于您的具体情况的信息,或者展示您尝试自己找到答案的资源,以及为什么这些答案不适合您?试试这个问题:http://stackoverflow.com/questions/13806699/phpseclib-can-i-connect-using-username-key-and-password-not-a-key-password – 2013-04-03 20:13:00

+0

可能重复的[phpseclib - Can我连接使用用户名,密钥和密码(不是密钥密码)](http://stackoverflow.com/questions/13806699/phpseclib-can-i-connect-using-username-key-and-password-nota-a-键 - 密码) – 2017-03-31 20:55:35

回答

4

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()); 
?> 
+0

它引发登录失败,我可以通过命令行和filezilla连接凭证。 – 2013-04-03 20:49:40

+0

哪一个失败?我发布了两个。如果你没有尝试两个都尝试。如果你确实......你能为我的日志找到两个吗? http://phpseclib.sourceforge.net/ssh/examples.html#logging演示如何启用日志记录。谢谢! – neubert 2013-04-03 21:05:27

+0

我需要使用第二个选项co'z客户端给我私钥,私钥密码和ftp密码。它没有返回任何日志。 – 2013-04-03 21:21:06

1

我想说的只是自己尝试密码身份验证。

以下是每个日志发生的情况。

phpseclib发送一个SSH_MSG_SERVICE_REQUEST到服务器,有效地说:“嘿 - 我想auth - 那好吗?”

服务器响应一个SSH_MSG_SERVICE_ACCEPT,有效地说“肯定 - 给我你得到什么!”

phpseclib然后发送一个SSH_MSG_USERAUTH_REQUEST与对应于您的私钥的公钥,有效地说:“好的 - 让我们用我的私钥授权 - 确保你会接受它......这是你的白公钥名单?”

服务器然后回应一个NET_SSH2_MSG_USERAUTH_PK_OK消息,有效地说,“呀 - 我们没问题 - 请使用它现在签署服务器标识符”。

phpseclib这样做,然后服务器就像“没关系!我只记得 - 我唯一的身份验证类型是基于密码的身份验证!”

phpseclib去“meh”哈哈,然后发送另一个SSH_MSG_SERVICE_REQUEST,再次请求授权,服务器就像“什么!?你为什么要求授权!?”

好像phpseclib也许不应该被发送的是第二SSH_MSG_SERVICE_REQUEST消息 - 它应该去直接到SSH_MSG_USERAUTH_REQUEST - 但可惜它目前还没有做到这一点。我会尝试更新代码库来做到这一点,并向作者提交一个pull请求。

谢谢!

+0

这是很好的解释。所以解决方案是修改NET库?。非常感谢你帮助解决这个问题。 – 2013-04-18 19:20:50

+0

我会先看看是否替换'if(!$ sftp-> login('********',$ rsa)&&!$ sftp-> login('********', '********')){'with'if(!$ sftp-> login('********','********')){'诀窍。 PHP库应该可能会改变,但在你的情况下,我认为你可以让它与lib一起工作。 – neubert 2013-04-18 19:25:05

+0

这并没有工作客户端服务器总是期待密钥和密码。在答案中查看我的日志。 – 2013-04-18 19:35:56