繁体   English   中英

带有bash的sftp / scp文件

[英]sftp/scp files with bash

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

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

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

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

任何建议,将不胜感激。

请记住,我无法安装任何东西,因此没有钥匙串,sshpass或期望。 如何使用Bash脚本中的密码运行sftp命令中找到所有其他答案 不可行,因为我无法在服务器上安装任何东西。

最初,我尝试使用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);

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

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

请同时检查mput,lftp手册中的镜像。

BTW。 如果您使用Expect,我认为您不需要在远程服务器上安装任何东西。 无论如何,我使用lftp而不是在大多数类似情况下工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM