Php 带有bash的sftp/scp文件

Php 带有bash的sftp/scp文件,php,bash,sftp,scp,Php,Bash,Sftp,Scp,我需要上传一组文件到sftp帐户 我的第一个想法是使用php的ssh2_connect()函数,我能够在本地毫无问题地工作。然而,一旦我转到开发环境,我很快意识到这不是一个好的解决方案,因为有太多的依赖项不存在,安装它们需要太多人的批准 所以,我的下一个想法是使用bash,这就是我需要帮助的地方。我将通过cron每小时运行这个bash脚本,所以它需要无人参与。但是,当我运行sftp/scp时,它需要密码 sftp帐户不允许ssh连接,因此我无法创建授权密钥。我也不想依赖远程机器上的.ssh文件夹

我需要上传一组文件到sftp帐户

我的第一个想法是使用php的ssh2_connect()函数,我能够在本地毫无问题地工作。然而,一旦我转到开发环境,我很快意识到这不是一个好的解决方案,因为有太多的依赖项不存在,安装它们需要太多人的批准

所以,我的下一个想法是使用bash,这就是我需要帮助的地方。我将通过cron每小时运行这个bash脚本,所以它需要无人参与。但是,当我运行sftp/scp时,它需要密码

sftp帐户不允许ssh连接,因此我无法创建授权密钥。我也不想依赖远程机器上的.ssh文件夹

如有任何建议,将不胜感激


请记住,我不能安装任何东西,所以没有钥匙链,sshpass或期待。在中找到的所有其他答案都不可行,因为我无法在服务器上安装任何东西。

检查lftp,它是文件传输中非常强大的工具。例如:

lftp -u "$username","$password" -e "cd /desc/path; put $FILE; bye" sftp://remote.example.com
同时检查lftp手册中的mput、后视镜


顺便说一句,如果你使用expect,我认为你不需要在远程服务器上安装任何东西。无论如何,在工作中的大多数类似情况下,我都使用lftp而不是expect。

最初我尝试使用php的ssh2\u connect(),因为php创建了我需要上传的文件。出于这个原因,最好在我的php脚本中包含这个sftp事务,但因为它不起作用,所以我转到了bash

我的解决方案实际上是使用php和curl:

$ch = curl_init();

$fp = fopen($file, "r");

curl_setopt($ch, CURLOPT_URL, "sftp://USER:PASS@HOST/" . basename($file));
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));

curl_exec($ch);

curl_close($ch);

@anubhava这不是重复的,因为你提供的帖子没有回答我的问题question@anubhava我在帖子中还提到,该帖子的答案对我的情况不可行,因为我不能使用密钥或在服务器上安装任何东西。缺少shell访问并不一定意味着你不能设置密钥。如果可以写入
~/.ssh/authorized_keys
,则可以在另一个系统上生成密钥对,准备适当的
authorized_keys
文件,并使用sftp将其上载到服务器-只要服务器配置为允许密钥身份验证。好的,我重新打开了问题,但不太可能在这里得到一些简单的答案。谢谢,服务器上没有安装trylftp,这不会有什么害处。请参阅中的上一条评论post@ScottJoudry我可能错了,但我很确定
lftp
是一个客户端程序,您只需要在服务器端运行一个SFTP服务器。我正在从一台服务器上传文件到另一台服务器,而源服务器上没有安装lftp。