带bash的sftp / scp文件

时间:2014-06-27 17:09:27

标签: php bash sftp scp

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

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

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

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

任何建议都将不胜感激。

请记住,我无法安装任何东西,所以没有钥匙串,sshpass或期望。 How to run the sftp command with a password from Bash script?中找到的所有其他答案都不可行,因为我无法在服务器上安装任何内容。

2 个答案:

答案 0 :(得分:1)

最初我试图使用php的ssh2_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);

答案 1 :(得分:0)

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

lftp -u "$username","$password" -e "cd /desc/path; put $FILE; bye" sftp://remote.example.com

同时检查mput,用lftp手册镜像。

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