我需要編寫一個php腳本,可以連接到sftp服務器,獲取服務器中的目錄和文件的列表,然後下載特定的文件。我給了認證部分的ppk文件(我認爲這是私鑰認證文件)。使用PHP curl連接到私人密鑰sftp
我在一些捲曲可以做到這一點的地方閱讀..但我不完全確定如何做到這一點。我試着複製粘貼從here代碼,但我的理解是代碼利用公鑰文件,而不是私鑰。
所以這裏就是我試圖連接到SFTP服務器
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL, 'sftp://233.42.20.115/');
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE,'megpxl_private.ppk');
curl_setopt($ch, CURLOPT_SSH_AUTH_TYPES,CURLSSH_AUTH_AGENT);
$output = curl_exec ($ch);
print_r($output);
輸出打印什麼..所以我應該怎麼做才能真正連接到該SFTP正常嗎?
====更新==== 現在我試圖使用phpseclib。這裏是我的代碼:
require_once 'phpseclib/Net/SSH2.php';
require_once 'phpseclib/Net/SFTP.php';
require_once 'phpseclib/Crypt/RSA.php';
require_once 'phpseclib/Crypt/RC2.php';
require_once 'phpseclib/Crypt/RC4.php';
require_once 'phpseclib/Math/BigInteger.php';
set_include_path('phpseclib/Net/');
$privatekey = file_get_contents('sftp_private.txt');
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents("private.ppk"));
$sftp = new Net_SFTP('233.12.20.225', 22);
if (!$sftp->login("myUserName", $rsa)) {
exit('Login Failed');
}
print_r($sftp);
但所有我得到的是這樣的信息:
No compatible server to client encryption algorithms found in /var/www/html/phpseclib/Net/SSH2.php on line 1375
=============更新:這作品====== ===========
require_once 'phpseclib/Net/SSH2.php';
require_once 'phpseclib/Net/SFTP.php';
require_once 'phpseclib/Crypt/RSA.php';
require_once 'phpseclib/Math/BigInteger.php';
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
$privatekey = file_get_contents('sftp_private.txt');
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents(mykey.ppk"));
$sftp = new Net_SFTP('223.22.20.122', 22);
if (!$sftp->login("usrPMEGPXLtxn", $rsa)) {
exit('Login Failed');
}
print_r($sftp->nlist()); // == $sftp->nlist('.')
print_r($sftp->rawlist()); // == $sftp->rawlist('.')
你可以隨時使用'curl_error($ CH)'得到最後的錯誤:http://php.net/manual/en/function.curl-error.php –