2012-09-04 188 views
1

創建一個小型圖書館通過SFTP發送和接收文件使用ssh2_sftp後方法,我發現,我有服務器連接到具有ssh連接禁用我只能通過SFTP連接。SFTP連接(不通過SSH)

服務器連接使用sftp命令在命令行下工作良好,但ssh發送給我一個「此服務只允許sftp連接。」

因此,因爲ssh2_sftp需要一個先前的ssh連接才能工作,我不知道要使用SFTP身份驗證連接到SFTP服務器的庫或如何執行操作。

phpseclib是否使用與ssh2_ftp不同的身份驗證方法?

任何想法?謝謝。

+0

您是否曾嘗試過使用'ssh2_ftp()'?從這個問題是不是完全清楚它是否是一個假設:) afaik'ssh2_connect()'建立一個連接而不選擇任何特定的服務,例如shell或sftp –

+0

「以前的SSH連接」是一個錯誤的術語。 SSH協議包括* shell *訪問(在您的情況下禁用),SFTP子系統,端口轉發等。在絕大多數情況下,SFTP不需要shell訪問(當SFTP本身沒有正確配置時,它可能需要shell,而您並不適用)。 –

+0

@ EugeneMayevski'EldoSCorp它是正確的,因爲sftp需要事先連接才能工作:) –

回答

2

99%只是提示輸入密碼。 phpseclib, a pure PHP SFTP implementation,如果密碼驗證失敗,則嘗試通過鍵盤交互提交密碼。如何使用它的示例:

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

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

// outputs the contents of filename.remote to the screen 
echo $sftp->get('filename.remote'); 
?> 
1

是的,你完全正確@arkascha ...經過一些研究,我找到了原因。

當我測試我的代碼對我自己的服務器,它的工作,並對其他服務器失敗,所以我認爲這是因爲ssh外殼連接被禁用。

要求兩臺服務器的允許AUTH方法(使用ssh2_auth_none)後,我得到了什麼是錯的:

我的服務器:

[0] =>公鑰

[1 ] =>密碼

其他服務器(發生故障的那臺服務器):

[0] =>公鑰

[1] => GSSAPI-keyex

[2] => GSSAPI與 - 麥克風

[3] =>鍵盤互動

因爲它不允許密碼,所以它是失敗的。就是這樣......

我讓你們浪費你的時間道歉......非常感謝鍵盤交互認證的