2012-09-04 185 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] =>键盘互动

因为它不允许密码,所以它是失败的。就是这样......

我让你们浪费你的时间道歉......非常感谢键盘交互认证的