-1

Web ページ経由でリモート Linux マシンに接続し、コマンドを送信して、その出力を Web ページ自体に表示しようとしています。

これは私がこれまで行ってきたことです(すべてのステップの後、コードが到達できる場所を追跡できるように、テキストをエコーし​​ます)

Web ページから実行した場合、コードは「2. phpseclib が含まれています\n」まで取得します

このコードを端末で実行すると、最後に到達します!

<html> 
<body> 

  TEST <br/>

<?php

echo "1. start\n";
define('NET_SSH2_LOGGING', 2);

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');


echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOSTNAME');
echo "3. after Net_SSH2\n";

if (!$ssh->login("USERNAME", "PASSWORD")) {
        echo "4. login failed";
        exit('Login Failed');
    } else {
       echo "4. login gained\n";
    }

echo "5. after login\n";


    if (!($stream = $ssh->exec("ls"))) {
            echo "fail: unable to execute command\n";
        } else {
          echo $stream;
            }

         if (!($stream = $ssh->exec("> foo.txt"))) {
            echo "fail: unable to execute command\n";
        } else {
          echo $stream;
            }       

echo $ssh->getLog();
echo "6. end of code\n";
?>


</body>
</html>

リモートマシンに接続した後、メッセージの表示を停止したように見えますか?

これが実際に可能かどうか疑問に思い始めていますか?それともセキュリティ上の問題によるものですか?

ここから SSH2 ライブラリをインストールしました: http://phpseclib.sourceforge.net/

また、同じコードを使用しましたが、include を使用する代わりに、require を使用しました。

<html> 
<body> 

  TEST <br/>

<?php

echo "1. start\n";
define('NET_SSH2_LOGGING', 2);

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
require('Net/SSH2.php');

echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOST');
echo "3. after Net_SSH2\n";

if (!$ssh->login("USERNAME", "PASSWORD")) {
        echo "4. login failed";
        exit('Login Failed');
    } else {
       echo "4. login gained\n";
    }

echo "5. after login\n";


    if (!($stream = $ssh->exec("ls"))) {
            echo "fail: unable to execute command\n";
        } else {
          echo $stream;
            }

         if (!($stream = $ssh->exec("> foo.txt"))) {
            echo "fail: unable to execute command\n";
        } else {
          echo $stream;
            }       

echo $ssh->getLog();
echo "6. end of code\n";
?>


</body>
</html>

解決済み: PEAR 経由でライブラリをインストールする

4

2 に答える 2

1

を に変更した場合、include現在のrequireようにはならないに違いありません。

そして、私set_include_path(get_include_path() . get_include_path().'/phpseclib');はあなたの問題でもあると思います。

これを試して:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');
于 2015-12-10T16:46:11.647 に答える
1

この行が問題です

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

ここには 2 つの問題があります。1 つ目は、コメントで述べたように、「/your/include/path/phpseclib」ではなく「/your/include/path/your/include/path/phpseclib」からロードしようとしていることです。

インクルード パスに phpseclib をインストールした場合は、get_include_path の 1 つを削除するだけで、コードを続行できます。また、コメントを読むために。

于 2015-12-10T16:27:23.300 に答える