[英]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.