2013-06-24 42 views
0

我試圖在使用PHP的SSH2的腳本運行時在我的兩臺服務器之間打開一個SSH連接,並在某處使用來自http://kvz.io/blog/2007/07/24/make-ssh-connections-with-php/的信息。這就是說,使用下面的代碼,我一直未能通過身份驗證。看起來這兩個服務器正在通信,但根本沒有進行身份驗證,因爲我得到了「失敗:無法驗證」消息。我可以使用相同的信息直接使用Web服務器的終端直接連接。值是通用的,原因很明顯。如果這意味着什麼,SSH服務器就是運行Mountain Lion的Mac(它運行的是OS X虛擬機),Web服務器運行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

我不能肯定地說,但可能您要連接的服務器使用鍵盤交互式身份驗證而不是密碼身份驗證。使用像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獲取日誌,看看它在做什麼。如果有必要,我會引導你。