1

プロジェクトでphpseclibを使用しています。私はそれをインストールし、ここの例に似た次のコードを使用してテストしています。

更新されたコード:

1           require("Net/SSH2.php");
2   
3           if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
4           
5           $ssh = new Net_SSH2('***');   // the host IP address 
6           
7           if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!");
8    
9           if (!$ssh->login('***', '***')) {   // (verified) username and password
10              echo "LOG: " . $ssh->getLog() . "<br>";
11              exit('Login failed!');
12          }

コードアップデート2:

1       require("Net/SSH2.php");
2
3       define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
4
5       if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");
6       
7       $ssh = new Net_SSH2('***');   // the host IP address 
8       
9       if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!");
10
11      if (!$ssh->login('***', '***')) {   // (verified) username and password
12          echo "LOG: " . $ssh->getLog() . "<br>";
13          echo "ALL ERRORS: ";
14          print_r($ssh->getErrors());
15          echo "<br>LAST ERROR: " . $ssh->getLastError() . "<br>";
16          exit('Login failed!');
17      }

16行目で終了します。getLog()何も表示されないため、問題がどこにあるかを知るのは困難です。PuTTYを使用してログイン資格情報をテストしました。他のサーバーにもログインできません。が問題を引き起こしているのか理解できません。

どんな助けでも大歓迎です!

4

6 に答える 6

1

提供したリンクの[ログを有効にする]ボタンを押すと、Net/SSH2.phpが含まれた直後に次のことが行われることがわかります。

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

それを試してみてください。

于 2012-07-31T20:16:58.283 に答える
1

Net_SSH2は関数ではなく、これはクラスであり、このクラス内のコンストラクターです。したがって、3行目は

if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!");

Net_SSH25行目以降のクラスにメソッドが存在するかどうかをさらに確認したい場合はNet_SSH2、次を追加できます。

if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method");
于 2012-07-31T17:21:20.570 に答える
1

PHPスクリプトの先頭でこれを実行してみてください。

error_reporting(E_USER_NOTICE);

error_reportingを0に設定すると、user_errorが抑制されるため、PHPセットアップがエラーを抑制している可能性があります。例えば。

error_reporting(E_USER_NOTICE);

user_error('zzzz', E_USER_NOTICE);

対。

error_reporting(0);

user_error('zzzz', E_USER_NOTICE);
于 2012-08-02T15:12:56.123 に答える
0

もちろん、3行目を次のように変更することもできます。

if( !class_exists('Net_SSH2')...

ただし、例外処理をいくつか投入することをお勧めします。PHPSecLibを使用したときは問題しかなかったので、PHPSSH2拡張機能をインストールする必要があるこのSSH2クラスを作成しました。

呼び出してみてください:getLog()失敗する理由を調べてください。

echo $ssh->getLog();
于 2012-07-31T17:17:21.463 に答える
0

接続しようとしたサーバー(サーバーB)でコードをホストすることになりました。同じコードが反対方向に機能しました(以前のコードがあったサーバーAに接続できました)。サーバーAには環境問題があると結論付けました。私はそれらがここで私を助けてくれたことに感謝します!

于 2012-08-02T19:14:13.747 に答える
0

最新のコメントを考えると、あなたのコードは8行目(Net_SSH2()オブジェクトがインスタンス化されている場所)にあると思います...

include()デプロイすると機能するがcheck_exists()、新しいオブジェクトのインスタンス化が失敗するという非常によく似た問題がありましたNet_SSH2...しかし、phpコマンドラインツールを使用して(デプロイ前に)phpファイルを解析すると正常に機能します...

そのため、問題はサーバー(私の場合はApache)にありました。phpseclibがインストールされたディレクトリにアクセス許可が設定されていたため、アクセスできませんでしcdた。

たまたま、私のhoemが作成したデプロイスクリプトは、サーバー上のファイルをコピーし、SSH2.phpにアクセスできないように奇妙なアクセス許可を設定するだけでした。

おそらくあなたはここで同様の問題を抱えていますか?

于 2012-10-04T09:31:41.843 に答える