上传文件到SFTP服务器


Uploading a file to a SFTP server

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

我已经安装了php库(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

我已经尝试替换行子系统sftp/usr/lib/openssh/sftp-server我的sshd_config通过内部sftp,但它没有工作(我预计,因为我认为这是连接到本地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

谢谢你,哈维尔

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

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

有关该问题的更多详细信息,请查看:http://www.frostjedi.com/phpbb3/viewtopic.php?f=46&t=168285

特别感谢TerraFrost的耐心和帮助。