我正在尝试连接到 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
我已经尝试按照一些人的建议将我的 sshd_config 的 Subsystem sftp/usr/lib/openssh/sftp-server 行替换为internal-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 上实现此回退,所以现在我能够使用最新的版本成功连接到 sftp 服务器phpseclib 的版本 ( https://github.com/phpseclib/phpseclib )。
有关该问题的更多详细信息,请查看:http://www.frostjedi.com/phpbb3/viewtopic.php?f=46&t=168285
特别感谢 TerraFrost 的耐心和帮助找到解决方案。
关于php - 将文件上传到 SFTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398145/