bugfix> php > 投稿

PHPで別のサーバーでCLIコマンドを実行しようとしています。他のサーバーでコマンドを実行するには、Linux ssh を使用していますコマンド。 PHPでCLIコマンドを実行するために、 exec() を使用しています 。

これは動作します...

$output = exec('cut -d: -f1 /etc/passwd'); //works!

これは、あるサーバーのコマンドラインから別のサーバーに機能します...

ssh my.otherserver.com "date"

しかし、PHPでこれを行おうとするとうまくいきません...

$output = exec('ssh my.otherserver.com "date"'); //does not work!

私がやろうとしていることは可能ですか?どうすればいいですか?前もって感謝します。

回答 3 件
  • ssh2_connectまたはphpseclib

    ssh2_connectまたはphpseclibを使用できます。 EC2インスタンスでは、ssh2_connectのパッケージをインストールする必要がありました(例:yum install php56-pecl-ssh2-0.12-5.15.amzn1.x86_64)。これはデフォルトではなかったためです。注:これは、bashスクリプトでも実行できます。

    <?php
    //ssh2_connect:
    $connection = ssh2_connect('localhost', 22);
    ssh2_auth_password($connection, 'user', 'password');
    $stream = ssh2_exec($connection, 'ls -l > /tmp/worked.txt');
    //phpseclib:
    include('Net/SSH2.php');
    $ssh = new Net_SSH2('www.example.com');
    $ssh->login('username', 'password') or die("Login failed");
    echo $ssh->exec('command');
    
    

    参考文献:

    http://phpseclib.sourceforge.net/

    http://php.net/manual/en/function.ssh2-connect.php

  • sshでサーバーに接続するには、 ssh2_exec を使用する必要があります  php関数。

    phpseclibを使用することをお勧めします。これはPHP SSH実装のラッパーです

  • 必要とする:

    sudo apt install php-ssh2
    
    

    この例は ls -ltrapR の出力を受け取ります  リモートphpサーバーから。

    #!/usr/bin/php
    <?php
    $con=ssh2_connect('223.245.xx.xx', 22);
    ssh2_auth_password($con, 'root', 'bybyDRRxxxx');
    $shell=ssh2_shell($con, 'xterm');
    $stream = ssh2_exec($con, 'ls -ltrapR');
    stream_set_blocking($stream, true);
    $out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    echo stream_get_contents($out);
    
    

    基本認証を使用しているだけなので注意してください(ファイントラストssl、VPNを使用する方が良い)。 さらに、暗号化キーなどを使用してセキュリティで保護できます。

あなたの答え