3

ssh 経由でサーバーに接続する必要がありますが、それにアクセスするには、まず別の ssh サーバーに接続する必要があります。それらへの標準的なパスワード アクセスを使用します。

したがって、私の手順は次のとおりです。

ssh root@serverdomain1.com

次に、serverdomain1に接続すると、ターミナルで次のようにします:

ssh myuseraccount@serverdomain2.com

PHPで、ssh2_exec('ssh serverdomain2.com'); を使ってみました。しかし、結果はありません。次に、ss2_tunnel($connection, ...) も試しました。しかし、何も機能しませんでした。

これは機能しません:

$ssh = ssh2_connect('serverdomain1.com', 22);
if (ssh2_auth_password($ssh, $user,$pass)) {
    $stream = ssh_exec($ssh, "ssh serverdomain2.com");

    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    echo stream_get_contents($stream_out);    // <== doesn't work!!!
}

これも機能しません:

$ssh = ssh2_connect('serverdomain1.com', 22);
if (ssh2_auth_password($ssh, $user,$pass)) {
    $tunnel = ssh2_tunnel($ssh, 'serverdomain2.com', 22);

    if (!$tunnel) { 
        echo('no tunnel<br/>');
    }
    else {
        fwrite($tunnel, "echo 1\n");
        while (!feof($tunnel)) {
            echo fgets($tunnel, 128);
        }
    }    
}

トンネルのエコー結果: 「SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.4 プロトコルが一致しません。」

PHP から SSH2 を使用してそれを行うにはどうすればよいですか?

4

2 に答える 2

1

私は最近、必要に応じて SSH を介して、PHP が実際の Bash シェルを取得して対話できるようにするプロジェクトを公開しました。ここから入手してください: https://github.com/merlinthemagic/MTS

このプロジェクトでは、ssh を使用してサーバーからサーバーへのバウンスを維持できます。

ダウンロードしたら、次のコードを使用するだけです。

//first you get a shell on the first server:
 $shellObj = \MTS\Factories::getDevices()->getRemoteHost('ip_address1')->setConnectionDetail('username1', 'password1')->getShell();

//then build on that first shell, the following way.
\MTS\Factories::getDevices()->getRemoteHost('ip_address2')->setConnectionDetail('username2', 'password2')->getShell($shellObj);


//any command executed on the shell will run only on the second host you connected to.
$return1  = $shellObj->exeCmd("hostname");
echo $return1;//hostname of the second host you connected to

///

于 2016-05-23T13:03:19.873 に答える
0
  1. サーバーにRSSH、PECL、SSH2ライブラリがインストールされていることを確認してください
  2. これは、phpinfo を使用して確認できます。

これは、ssh2 を使用してサーバーにアクセスするための作業コードです。それが役立つことを願っています!

<?php
        $host = 'SERVER_HOST_ADDR';
        $port = SERVER_PORT;
        $username = 'SERVER_USERNAME';
        $password = 'SERVER_PASSWORD';
        $remoteDir = './home/'; //DIR_PATH
        $localDir = '/var/www/html/';        //LOCAL_DIR_PATH

        // Make our connection
        $connection = ssh2_connect($host);

        // Authenticate
        if (!ssh2_auth_password($connection, $username, $password)) {
            throw new Exception('Unable to connect.');
        }

        // Create our SFTP resource
        if (!$sftp = ssh2_sftp($connection)) {
            throw new Exception('Unable to create SFTP connection.');
        }

        /**
          * Now that we have our SFTP resource, we can open a directory resource
          * to get us a list of files. Here we will use the $sftp resource in
          * our address string as I previously mentioned since our ssh2:// 
          * protocol allows it.
          */
        $files = array();
        $dirHandle = opendir("ssh2.sftp://$sftp/$remoteDir");

        // Properly scan through the directory for files, ignoring directory indexes (. & ..)
        while (false !== ($file = readdir($dirHandle))) {
            if ($file != '.' && $file != '..') {
                $files[] = $file;
            }
        }
       echo "<pre>";print_r($files);
    ?>
于 2016-04-14T06:18:28.230 に答える