使用ppk文件连接到PHP中的sftp

时间:2015-08-24 00:56:47

标签: php sftp phpseclib

我无法使用提供的.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());

2 个答案:

答案 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');