2016-05-04 74 views
1

sftpサーバに接続し、サーバ内のディレクトリとファイルのリストを取得し、後で特定のファイルをダウンロードできるPHPスクリプトを作成する必要があります。私は、認証パートのためのppkファイル(私はこれが秘密鍵認証ファイルであると仮定します)を与えられました。プライベートキーを使ってsftpに接続するにはPHP curlを使用してください

私はカールがこれを行うことができるいくつかの場所を読みました。しかし、私はそれを行う方法が完全にはわかりません。私はhereからコードを貼り付けることを試みたが、私の理解はコードが秘密鍵の代わりに公開鍵ファイルを利用していることであった。

だからここに私は実際にきちんとこのSFTPに接続するために何をすべき..私はSFTPサーバ

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_URL, 'sftp://233.42.20.115/'); 
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP); 
curl_setopt($ch, CURLOPT_SSH_PRIVATE_KEYFILE,'megpxl_private.ppk'); 
curl_setopt($ch, CURLOPT_SSH_AUTH_TYPES,CURLSSH_AUTH_AGENT); 
$output = curl_exec ($ch); 
print_r($output); 

に出力を印刷し、何も接続しないでしようとした何ですか?

====アップデート==== 今私はphpseclibを使用しようとしています。ここに私のコードは次のとおりです。

require_once 'phpseclib/Net/SSH2.php'; 
require_once 'phpseclib/Net/SFTP.php'; 
require_once 'phpseclib/Crypt/RSA.php'; 
require_once 'phpseclib/Crypt/RC2.php'; 
require_once 'phpseclib/Crypt/RC4.php'; 
require_once 'phpseclib/Math/BigInteger.php'; 

set_include_path('phpseclib/Net/'); 

$privatekey = file_get_contents('sftp_private.txt'); 

$rsa = new Crypt_RSA(); 
$rsa->loadKey(file_get_contents("private.ppk")); 
$sftp = new Net_SFTP('233.12.20.225', 22); 
if (!$sftp->login("myUserName", $rsa)) { 
    exit('Login Failed'); 
} 
print_r($sftp); 

しかし、私が得たすべては、このメッセージだった:

No compatible server to client encryption algorithms found in /var/www/html/phpseclib/Net/SSH2.php on line 1375 

=============更新:!この作品は======あなたのホストは、通常のphpinfoに積極的にこの拡張子を持っている場合===========

require_once 'phpseclib/Net/SSH2.php'; 
require_once 'phpseclib/Net/SFTP.php'; 
require_once 'phpseclib/Crypt/RSA.php'; 
require_once 'phpseclib/Math/BigInteger.php'; 

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); 

$privatekey = file_get_contents('sftp_private.txt'); 

$rsa = new Crypt_RSA(); 
$rsa->loadKey(file_get_contents(mykey.ppk")); 
$sftp = new Net_SFTP('223.22.20.122', 22); 
if (!$sftp->login("usrPMEGPXLtxn", $rsa)) { 
    exit('Login Failed'); 
} 

print_r($sftp->nlist()); // == $sftp->nlist('.') 
print_r($sftp->rawlist()); // == $sftp->rawlist('.') 
+0

あなたは常に' curl_error($ chを)を使用することができます(http://phpseclib.sourceforge.net/new/sftp/examples.htmlから)最後のエラーを取得する:http://php.net/manual/en/function.curl-error.php –

答えて

1

あなたは、あなたがサーバー上の任意の追加のライブラリをインストールする必要はありませんhttp://phpseclib.sourceforge.net/を使用している場合...

include('Net/SFTP.php'); 

$sftp = new Net_SFTP('www.domain.tld'); 
if (!$sftp->login('username', 'password')) { 
    exit('Login Failed'); 
} 

print_r($sftp->nlist()); // == $sftp->nlist('.') 
print_r($sftp->rawlist()); // == $sftp->rawlist('.') 

`

+0

私はphpseclibを使用しようとしましたが、「クライアントとの互換性のないサーバーの暗号化アルゴリズムは、phpseclib/Net/SSH2.phpの1375行に見つかりませんでした。 Btw私はこれに使用するphpseclibコードを更新しました。 – imin

+0

それは残念ですが、私はそれを使用して、それは非常に簡単に働いた – Barry

+1

これは、私はちょうどset_include_path(get_include_path()を追加する必要があります。 – imin

-1

PHPが既にネイティブsshの拡張子を持っている...)(見えます。あなたが探している

http://php.net/manual/en/wrappers.ssh2.php

そして、もっと具体的な: http://php.net/manual/en/function.ssh2-exec.php

そこからは、このような何か行うことができます。

// Generate connection 
$conn = ssh2_connect('your.site.com', 22); 
ssh2_auth_password($conn, 'username', 'password'); 

// Set the connection setup for files 
$sftp = ssh2_sftp($connection); 

// List the Directory (if this is a UNIX system) 
$ls = ssh2_exec($conn, 'path/to/dir ls'); 
echo $ls; // or create an array with a foreach function. 

// To read the file 
$file = fopen("ssh2.sftp://$sftp/path/to/file", 'r'); 
// you can grab the file using the $file bytes. 

// Or just download the file. 
ssh2_scp_recv($conn, '/path/remote/filename', '/path/local/filename'); 

をこの情報がお役に立てば幸いです。

+0

残念ながら現在私のホストにはssh2がインストールされていません...これについては後で調べる必要があります。 – imin

+0

質問はキー認証を特に要求し、回答はユーザー名/パスワードを使用します。 –

関連する問題