2012-07-31 136 views
1

我在我的項目中使用了phpseclib。我已經安裝了它並且正在使用以下類似於here示例的代碼進行測試。無法使用SSH2連接

更新的代碼:

1   require("Net/SSH2.php"); 
2 
3   if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!"); 
4   
5   $ssh = new Net_SSH2('***'); // the host IP address 
6   
7   if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!"); 
8  
9   if (!$ssh->login('***', '***')) { // (verified) username and password 
10    echo "LOG: " . $ssh->getLog() . "<br>"; 
11    exit('Login failed!'); 
12   } 

代碼更新2:

1  require("Net/SSH2.php"); 
2 
3  define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); 
4 
5  if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!"); 
6  
7  $ssh = new Net_SSH2('***'); // the host IP address 
8  
9  if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method!"); 
10 
11  if (!$ssh->login('***', '***')) { // (verified) username and password 
12   echo "LOG: " . $ssh->getLog() . "<br>"; 
13   echo "ALL ERRORS: "; 
14   print_r($ssh->getErrors()); 
15   echo "<br>LAST ERROR: " . $ssh->getLastError() . "<br>"; 
16   exit('Login failed!'); 
17  } 

退出在行#16 getLog()給什麼,所以很難知道問題出在哪裏。我使用PuTTY測試了登錄憑證。它也無法登錄到其他服務器。我無法理解什麼是造成這個問題。

任何幫助將不勝感激!

+0

在第一行放上'define('NET_SSH2_LOGGING',2);'你就可以看到'$ ssh-> getLog()' – 2012-08-01 05:58:23

+0

的輸出我試過了。它沒有顯示任何$ ssh-> getLog() – 2012-08-01 13:19:33

回答

0

我結束了我的託管服務器(服務器B)上的代碼,我試圖連接。相同的代碼在相反的方向工作(我可以連接到我的代碼以前的服務器A)!我最終得出結論,服務器A有環境問題。 我欣賞那些幫助我在這裏!

0

當然,你可以在你的3號線更改爲:

if(!class_exists('Net_SSH2')... 

不過,我會建議你在一些異常處理拋出。當使用PHPSecLib時,我只有問題,所以我創建了this SSH2 Class,這需要安裝PHP SSH2擴展。

您應該嘗試撥打:getLog()以瞭解其失敗的原因。

echo $ssh->getLog(); 
+0

它不是關於路徑。如果我回應SSH2.php中的某些內容,我實際上可以在網頁上看到它。 – 2012-07-31 17:39:43

+0

我知道,看看更新 – 2012-07-31 17:41:53

+0

我在SSH2.php裏面附加了SSH2類,然後我嘗試了你提供的鏈接中的'SSH2 Usage'部分,但是它在第17行失敗了。它無法連接到服務器。另外,echo $ ssh-> getLog();什麼都不給。抱歉。 – 2012-07-31 18:24:49

1

Net_SSH2Net_SSH2不是函數,它是這個類中的類和構造函數。 所以第3行應該是

if (!class_exists('Net_SSH2')) die("Class Net_SSH2 doesn't exist!"); 

如果您想進一步的檢查,如果Net_SSH2方法Net_SSH2班線5之後存在,你可以補充一點:

if (!method_exists($ssh, 'Net_SSH2')) die("Net_SSH2 class doesn't have Net_SSH2 method"); 
+0

我按照你說的做了修改。現在它在第8行退出。登錄憑證是正確的。 – 2012-07-31 17:36:39

+0

@rad所以我的修改工作正常。它很難說什麼可以與錯誤的線8.重複檢查您的憑據,可能是你嘗試連接的服務器有問題等 – 2012-07-31 17:40:50

+0

是的,它正在工作,直到那一部分。但是,憑據是正確的,我只是使用PuTTY進行檢查。我也嘗試連接到不同的服務器,但登錄失敗了。 – 2012-07-31 17:49:46

1

如果你打的「啓用日誌記錄」按鈕你提供的鏈接你會看到,包含Net/SSH2.php後立即完成以下操作:

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); 

試試看。

+0

我曾嘗試過,它有所作爲。抱歉。請參閱我更新的代碼。 – 2012-07-31 20:52:20

+0

var_dump($ ssh-> getLog())說什麼? – 2012-07-31 21:33:41

+0

它給字符串(0)「」 – 2012-08-01 13:25:51

1

試着在你的PHP腳本的頂部這樣做:

error_reporting(E_USER_NOTICE); 

設定使用error_reporting爲0,抑制USER_ERROR所以它很可能你的PHP安裝只是抑制誤差。例如。

error_reporting(E_USER_NOTICE); 

user_error('zzzz', E_USER_NOTICE); 

error_reporting(0); 

user_error('zzzz', E_USER_NOTICE); 
0

鑑於最新的意見,我認爲存在於8號線(其中Net_SSH2()對象實例化)...

我剛在那裏,一旦部署了一個非常類似的問題,include()的工作,但你的代碼check_exists()和實例化一個新的Net_SSH2對象會失敗......但是,隨着PHP的命令行工具分析我的PHP文件(部署前)將正常工作......

所以問題是服務器(Apache的在我的情況上):安裝phpseclib的目錄具有權限設置,因此我甚至無法對其執行cd

碰巧,我的部署腳本只是簡單地複製服務器上的文件並設置奇怪的權限,因此SSH2.php無法訪問。

也許你在這裏有類似的問題?