2013-04-03 151 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