【发布时间】:2016-05-04 16:52:02
【问题描述】:
我需要编写一个可以连接到sftp服务器的php脚本,获取服务器中的目录和文件列表,然后下载特定的文件。我得到了认证部分的 ppk 文件(我假设这是私钥认证文件)。
我在几个地方读到 curl 可以做到这一点。但我不完全确定如何做到这一点。我尝试从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)获取最后一个错误:php.net/manual/en/function.curl-error.php