1

最近、phpseclib ライブラリを実装して SFTP サーバーにログインし、ディレクトリ内のすべてのファイルを一覧表示してダウンロードしようとしました。それらをダウンロードしたら、サーバー上の別のディレクトリに移動します。

私はあまり運がありません...そのため、サイトからコードを直接たどりますが、ログを追加しました。

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

require('Net\SSH2.php');
require('Crypt\RSA.php');   

define('NET_SSH2_LOGGING', 2);
$ssh = new Net_SSH2('host_name', 'port');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('path_to_rsa_file'));
if (!$ssh->login('username', $key)) {
  exit('Login Failed');
}

$ssh->exec("pwd");

その結果、次のエラーが発生します。

Unable to request pseudo-terminal

確かに、これは古いバージョンです。どのバージョンか正確にはわからないので、更新する必要があると思いました。composer を介して最新バージョンを取得し、上記と同じコードを実行した後、エラーは発生しませんが、ログに次のように表示されます。

<- NET_SSH2_MSG_USERAUTH_SUCCESS (since last: 0.1395, network: 0.1394s)

-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0.0006, network: 0.0005s)
00000000  00:00:00:07:73:65:73:73:69:6f:6e:00:00:00:00:7f  ....session.....
00000010  ff:ff:ff:00:00:40:00                             .....@.

<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.1232, network: 0.1231s)
00000000  00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:80:00  ................

-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0008, network: 0.0006s)
00000000  00:00:00:00:00:00:00:04:65:78:65:63:01:00:00:00  ........exec....
00000010  03:70:77:64                                      .pwd

<- NET_SSH2_MSG_CHANNEL_FAILURE (since last: 0.123, network: 0.1228s)
00000000  00:00:00:00                                      ....

アイデアはありますか?SFTP クラスも使用してみましたが、「通知: 接続が途中で閉じられました」という他の問題で失敗しました。

助けてくれてありがとう!

4

1 に答える 1

0

サーバーが をサポートしていないようexec()です。read()/の方がうまくいくかもしれませんwrite():

http://phpseclib.sourceforge.net/ssh/examples.html#interactive

SFTPに関しては...ログを見てアイデアを得る必要があります。

于 2013-09-20T20:54:04.667 に答える