2013-06-24 5 views
0

Я пытаюсь открыть SSH-соединение между двумя серверами во время выполнения скрипта с использованием PHP SSH2 и получить где-то информацию от http://kvz.io/blog/2007/07/24/make-ssh-connections-with-php/. Тем не менее, используя следующий код, я продолжаю не аутентифицироваться. Кажется, что два сервера обмениваются данными, но просто не аутентифицируются, так как я получаю сообщение «fail: not authenticate». Я могу легко подключиться с помощью терминала веб-сервера напрямую, используя ту же информацию. Ценности являются общими по очевидным причинам. Если это что-то значит, SSH-сервер - это Mac, работающий с Mountain Lion (он запускает виртуальные машины OS X), а веб-сервер запускает Ubuntu 12.04.Проблемы с аутентификацией с помощью php ssh2

<?php 
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); 
if(!($con = ssh2_connect('192.168.0.1', 22))){ 
    echo "fail: unable to establish connection\n"; 
} else { 
    if(!ssh2_auth_password($con, 'myusername', 'mysecretpassword')) { 
     echo "fail: unable to authenticate\n"; 
    } else { 
     echo "okay: logged in...\n"; 

     // execute a command 
     if (!($stream = ssh2_exec($con, "mysshcommand"))) { 
      echo "fail: unable to execute command\n"; 
     } else { 

      stream_set_blocking($stream, true); 
      $data = ""; 
      while ($buf = fread($stream,4096)) { 
       $data .= $buf; 
      } 
      fclose($stream); 
     } 
    } 
} 
?> 

ответ

0

Я не могу сказать точно, но это возможно сервер вы подключаетесь, использует клавиатуру интерактивной AUTH, а не пароль аутентификации. Используя клиента, такого как PuTTY, они выглядели бы одинаково, если на самом деле это не так.

Моя рекомендация будет заключаться в использовании phpseclib, a pure PHP SSH2 implementation. например.

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('www.domain.tld'); 
if (!$ssh->login('username', 'password')) { 
    exit('Login Failed'); 
} 

echo $ssh->exec('pwd'); 
echo $ssh->exec('ls -la'); 
?> 

Сначала он попытается аутентифицировать пароль, и если это не удастся, он попробует использовать клавиатуру. И если даже это не удается, вы также можете получить журналы с phpseclib, чтобы узнать, что он делает. Я проведу вас через это, если это будет необходимо.