我无法使用提供的.ppk文件连接到SFTP服务器。
我在Filezilla中尝试过这个ppk文件,但它确实有效。 根据{{3}}中的一条评论,最好使用phpseclib,但我没有找到任何关于如何使用ppk文件从SFTP下载文件的说明。任何指示或建议?
这是代码,我不确定这是否有帮助。
include('Net/SSH2.php');
include('Crypt/RSA.php');
include('Net/SFTP.php');
DEFINE('SERVER','sample.sftp.com');
DEFINE('USER','sampleUserName');
DEFINE('KEY','sample_key_22733_priv.ppk');
$sftp = new Net_SFTP(SERVER);
//I guess this password is useless here
//and i will have to use my ppk file here but i don't know how
if (!$sftp->login(USER, 'password')) {
exit('Login Failed');
}
var_dump($sftp->nlist());
答案 0 :(得分:1)
<强>更新强> 正如@neubert所证实的那样,支持PPK文件,但你需要确保它们是RSA,正如我所解释的那样,但你不需要它们的OpenSSH格式
将PPK转换为 OpenSSH RSA密钥。您可以使用PuTTYgen可执行文件转换它:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
使用RSA密钥后,可以将其与phpseclib一起使用:http://phpseclib.sourceforge.net/ssh/auth.html#rsakey
答案 1 :(得分:1)
phpseclib与PPK文件完美配合,假设它们是RSA密钥而不是DSA密钥。只需初始化Crypt_RSA
对象,然后在该对象上调用loadKey(file_get_contents('path/to/key.ppk'))
。
要下载文件,请执行$sftp->get('/path/to/filename.ext')
。
这是您修改的原始代码以包含所有这些:
<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');
include('Net/SFTP.php');
DEFINE('SERVER','sample.sftp.com');
DEFINE('USER','sampleUserName');
DEFINE('KEY','sample_key_22733_priv.ppk');
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents(KEY));
$sftp = new Net_SFTP(SERVER);
//I guess this password is useless here
//and i will have to use my ppk file here but i don't know how
if (!$sftp->login(USER, $rsa)) {
exit('Login Failed');
}
echo $sftp->get('/path/to/filename.ext');