我正在尝试连接到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
谢谢你, 哈维尔
答案 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的耐心和帮助以获得解决方案。