将文件上载到SFTP服务器

时间:2013-05-06 11:49:14

标签: php sftp phpseclib

我正在尝试连接到SFTP服务器并通过php上传文件。

我已经安装了php lib(php_ssh2),但此时失败了:

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');


$sftp = ssh2_sftp($connection);

?>

最后一行返回false,并在日志中显示以下警告:

 Warning: ssh2_sftp(): Unable to startup SFTP subsystem: Unable to request SFTP subsystem 

我不知道当我尝试使用sftp命令通过命令行连接到同一服务器时,我得到的错误是否有关:

sftp error subsystem request failed on channel 0

我已经尝试用internal-sftp替换我的sshd_config的子系统sftp / usr / lib / openssh / sftp-server,但是它不起作用(我认为这是因为我认为它是用于连接的到本地sftp服务器)

我已经尝试重新安装openssh-client和openssh-server(虽然我认为不应该要求最后一个,因为服务器是外部主机)。

我尝试使用Filezilla登录SFTP,一切顺利。

另外,我已经尝试过phpseclib,但即使使用正确的凭据,它也会在登录时出错。

因此,我无法通过PHP或命令行将文件上传到sftp服务器。

你有一个我在这里缺少的队列吗?

编辑:

phpseclib日志太长了,我把它粘贴在这里(请告诉我如何附加它以防不允许这种链接): http://pastebin.com/Kkw027nR

这是FileZilla日志http://pastebin.com/6u90646Q,我注意到问题可能与这两行有关,但我不确定:

2013-05-07 08:16:15 2704 3 Traza: Opened channel for session
2013-05-07 08:16:15 2704 3 Traza: Primary command failed; attempting fallback

谢谢你, 哈维尔

1 个答案:

答案 0 :(得分:2)

似乎服务器配置上存在导致连接尝试失败的问题。 无论如何,在失败的情况下,FileZilla和Putty(psftp)都可以通过某种回退成功连接。

我无法解释细节,但在与phpseclib的创建者共享日志之后,他已经能够在他的lib上实现这个回退,所以现在我能够使用最新的成功连接到sftp服务器版本的phpseclib(https://github.com/phpseclib/phpseclib)。

有关此问题的详细信息,请查看以下内容:http://www.frostjedi.com/phpbb3/viewtopic.php?f=46&t=168285

特别感谢TerraFrost的耐心和帮助以获得解决方案。