使用PuTTY.ppk密钥文件在PHP中对SFTP服务器进行身份验证
我想用PHP通过SFTP传输文件 远程服务器提供IP、用户名和密码,包括带有密码短语的PPK文件。我可以使用WinSCP登录,但在我的php脚本中,我遇到了使用PuTTY.ppk密钥文件在PHP中对SFTP服务器进行身份验证,php,ssh,sftp,Php,Ssh,Sftp,我想用PHP通过SFTP传输文件 远程服务器提供IP、用户名和密码,包括带有密码短语的PPK文件。我可以使用WinSCP登录,但在我的php脚本中,我遇到了ssh2\u auth\u pubkey\u file()的问题。 你能告诉我我该怎么处理给定的PPK文件吗? 我需要提供什么样的公钥和私钥来进行身份验证 请解释清楚,不胜感激。谢谢大家! 代码: 我使用的公钥来自PuTTYgen。 已将PPK转换为PUB文件。函数ssh2\u auth\u pubkey\u文件接受公共OpenSSH格式的公
ssh2\u auth\u pubkey\u file()的问题。
你能告诉我我该怎么处理给定的PPK文件吗?
我需要提供什么样的公钥和私钥来进行身份验证
请解释清楚,不胜感激。谢谢大家!
代码:
我使用的公钥来自PuTTYgen。
已将PPK转换为PUB文件。函数
ssh2\u auth\u pubkey\u文件
接受公共OpenSSH格式的公钥和私钥文件
要从PuTTY.ppk
密钥文件生成这些文件,请执行以下操作:
- 启动并加载
键.ppk
- 使用公钥的内容粘贴到公钥文件的OpenSSH授权密钥文件中
- 使用转换>导出OpenSSH密钥菜单命令生成私钥文件
似乎有一个(带有密码短语的密钥) 该错误导致: ssh2\u auth\u pubkey\u file():身份验证失败,原因是。。。使用公钥:回调返回错误
如果您想使用私钥,并且无法修复SSH库,则可以使用
set_include_path("phpseclib");
require_once("Net/SSH2.php");
require_once("Crypt/RSA.php");
$privatekey = new Crypt_RSA();
$privatekey_data = file_get_contents($pri_key);
$privatekey->setPassword($passphrase);
if (!$privatekey->loadKey($privatekey_data, CRYPT_RSA_PRIVATE_FORMAT_PKCS1))
{
die("Cannot load key");
}
$sftp = new Net_SSH2($host);
if (!$sftp->login($username, $privatekey))
{
die("Cannot login");
}
phpseclib甚至支持.ppk密钥,尽管我也不能使用加密的.ppk密钥。但是加密的OpenSSH密钥工作正常。请注意,phpseclib不需要单独的公钥文件
set_include_path("phpseclib");
require_once("Net/SSH2.php");
require_once("Crypt/RSA.php");
$privatekey = new Crypt_RSA();
$privatekey_data = file_get_contents($pri_key);
$privatekey->setPassword($passphrase);
if (!$privatekey->loadKey($privatekey_data, CRYPT_RSA_PRIVATE_FORMAT_PKCS1))
{
die("Cannot load key");
}
$sftp = new Net_SSH2($host);
if (!$sftp->login($username, $privatekey))
{
die("Cannot login");
}