【问题标题】:sftp/scp files with bash带有 bash 的 sftp/scp 文件
【发布时间】:2014-08-18 21:19:41
【问题描述】:

我需要将一组文件上传到一个 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? 中找到的所有其他答案都不可行,因为我无法在服务器上安装任何东西。

【问题讨论】:

  • @anubhava 这不是重复的,因为您提供的帖子没有回答我的问题
  • @anubhava 我在我的帖子中还提到,该帖子的答案不适合我的情况,因为我无法使用密钥或在服务器上安装任何东西。
  • 缺乏 shell 访问权限并不一定意味着您不能设置密钥。如果你可以写~/.ssh/authorized_keys,那么你可以在另一个系统上生成一个密钥对,准备一个合适的authorized_keys文件,然后用sftp上传到服务器——只要服务器配置为允许密钥认证。跨度>
  • 好的,我重新打开了这个问题,但您不太可能在这里得到一些简单的答案。
  • 谢谢,试试看不会有什么坏处

标签: php bash sftp scp


【解决方案1】:

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

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

还要检查 lftp 手册中的 mput、镜像。

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

【讨论】:

  • lftp 未安装在服务器上。在帖子中查看之前的评论
  • @ScottJoudry 我可能对此有误,但我很确定lftp 是一个客户端程序,您只需要在服务器端运行一个 SFTP 服务器。
  • 我正在将文件从一台服务器上传到另一台服务器,而源服务器没有安装 lftp。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 2015-12-09
    • 1970-01-01
    • 2013-10-11
    • 2011-01-24
    • 1970-01-01
    • 2013-01-21
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多