php - 将文件上传到 SFTP 服务器

标签 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

我已经尝试按照一些人的建议将我的 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/

相关文章:

实现TFTP、FTP、SFTP服务器的Python包

php - PHP SSH Lib,回显到文件

php - MySQL 多对多表到表矩阵

php - 拉拉维尔 5 : Login password doesn't match with saved one

php - API中PDO连接超时,php-fpm重启解决

java - apache ftp 客户端(下载器)的标准缓冲区大小

php - 通过 SFTP 发送逗号分隔的 CSV?

google-play - Google Play 购买中签名验证失败

phpseclib 即使在简单的命令上也不返回任何结果

php - Zend insert 防止特定转义