我有一些PHP代码可以很好地使用cURL将文件上传到主机,这些主机只是简单地使用用户&密码ftp,现在我必须上传到只允许公钥验证的服务器并收到错误:“* SSH公钥验证失败:回调返回错误”
我的密钥存在问题,因为它们的格式不正确,但是后来将它们放在正确的单行格式中,这就停止了“not base64 encoded”错误。我在网上找不到这个回调错误的帮助。
我的代码如下。
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL, 'sftp://user:@12.12.12.12:22/testfile.gz');
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_SSH_PUBLIC_KEYFILE,'C:\keys\public.pub');
curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE,'C:\keys\private.ppk');
curl_setopt($ch, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,'2acfe24108c37a276a93ac3398a5oe8f');
curl_setopt($ch, CURLOPT_SSH_AUTH_TYPES,CURLSSH_AUTH_PUBLICKEY);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
$sR = curl_exec ($ch);
这是运行测试的输出
* About to connect() to 12.12.12.12 port 22 (#0)
* Trying 12.12.12.12...
* connected
* Connected to 12.12.12.12 (12.12.12.12) port 22 (#0)
* SSH MD5 fingerprint: ebbc61b886c798b25073c912833ffers
* SSH authentication methods available: publickey
* Using ssh public key file C:\keys\public.pub
* Using ssh private key file C:\keys\private.ppk
* SSH public key authentication failed: Callback returned error
* Authentication failure
* Closing connection #0
任何帮助表示赞赏
答案 0 :(得分:7)
当您的libssh2使用libgcrypt构建时,有些情况(基于debian的发行版)。 在那些中,使用PEM编码的私钥文件:
$ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
答案 1 :(得分:2)
ppk是一个putty putty私钥,你需要将其导出为open(使用puttygen go Conversations-> export OpenSSH)
答案 2 :(得分:0)
你可能会更好地使用纯PHP PHP SFTP实现的phpseclib。例如
<?php
include('Net/SFTP.php');
$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}
// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
?>
答案 3 :(得分:0)
可在以下链接中找到更多信息: Trying to connect using ssh2_auth_pubkey_file()