4

ユーザーとパスワードのftpを使用しているだけのホストにcURLを使用してファイルをアップロードするのに適したphpコードがいくつかありますが、公開鍵認証のみを許可するサーバーにアップロードする必要があり、エラーが発生しています:「* SSH公開鍵認証に失敗しました: コールバックがエラーを返しました"

キーが正しい形式ではないため、キーに問題がありましたが、正しい単一行形式に変更したため、「base64 でエンコードされていません」というエラーが発生しなくなりました。このコールバック エラーに関するオンラインのヘルプはあまり見つかりません。

私のコードは次のとおりです。

$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

任意の助けをいただければ幸いです

4

4 に答える 4

7

libssh2 が libgcrypt でビルドされている場合 (debian ベースのディストリビューション) があります。その中で、PEM でエンコードされた秘密鍵ファイルを使用します。

$ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
于 2013-07-26T14:38:41.173 に答える
3

ppk は putty putty 秘密鍵です。これをオープンとしてエクスポートする必要があります ( puttygen go Conversations-> export OpenSSH を使用)

于 2013-02-07T20:58:10.503 に答える
0

純粋なPHPSFTP実装である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');
?>
于 2013-02-14T13:46:09.503 に答える
0

Debian ディストリビューション (Ubuntu LTS 14.04 など) の libssh2 は、パスフレーズをサポートしない libgcrypt を使用します。Alexander's answer で説明されているように、パスフレーズなしでキーを使用するか、PEM キーを生成します。

詳細については、次のリンクを参照してください: ssh2_auth_pubkey_file() を使用して接続しようとしています。

于 2015-07-13T06:04:34.230 に答える