Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PuTTY.ppk密钥文件在PHP中对SFTP服务器进行身份验证_Php_Ssh_Sftp - Fatal编程技术网

使用PuTTY.ppk密钥文件在PHP中对SFTP服务器进行身份验证

使用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格式的公

我想用PHP通过SFTP传输文件

远程服务器提供IP、用户名和密码,包括带有密码短语的PPK文件。我可以使用WinSCP登录,但在我的php脚本中,我遇到了
ssh2\u auth\u pubkey\u file()的问题。

你能告诉我我该怎么处理给定的PPK文件吗? 我需要提供什么样的公钥和私钥来进行身份验证

请解释清楚,不胜感激。谢谢大家!

代码:

我使用的公钥来自PuTTYgen。
已将PPK转换为PUB文件。

函数
ssh2\u auth\u pubkey\u文件
接受公共OpenSSH格式的公钥和私钥文件

要从PuTTY
.ppk
密钥文件生成这些文件,请执行以下操作:

  • 启动并加载
    .ppk
  • 使用公钥的内容粘贴到公钥文件的OpenSSH授权密钥文件中
  • 使用转换>导出OpenSSH密钥菜单命令生成私钥文件
只要Web服务器可以访问这些文件,文件保存在哪里并不重要


似乎有一个(带有密码短语的密钥)

该错误导致:

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");
}