【问题标题】:How to copy files using Net::SSH in Ruby?如何在 Ruby 中使用 Net::SSH 复制文件?
【发布时间】:2019-06-03 13:19:16
【问题描述】:

据我所知,如果我想将文件复制到远程主机然后从命令行操作它,我需要同时使用 Net::SCP 和 Net::SSH。

最好设置一个 SSH 会话,进行复制,然后使用相同的连接解压缩文件并安装它们。

我错过了什么吗?

【问题讨论】:

    标签: ruby ssh scp net-ssh


    【解决方案1】:

    Net::SCP 允许您轻松地从现有的 Net::SSH 会话中获取 Net::SCP 引用:

    require "net/ssh"
    require "net/scp"
    Net::SSH.start("remote.host", "username", :password => "passwd") do |ssh|
      ssh.scp.upload("/local/path", "/remote/path")
      ssh.exec("...insert commands...")
    end
    

    在此处阅读更多信息:http://net-ssh.github.io/net-scp/classes/Net/SCP.html

    【讨论】:

    • 文件下载后是否也可以从远程服务器中删除?
    • 使用 SSH 会话这应该是可能的。只需执行“rm”命令:“rm /path/to/file”
    • 这不会造成文件在下载之前就被删除的问题吗?比赛条件。
    • 我不确定。您总是可以等到文件下载完成后再删除它
    • 在您的代码中,您如何知道文件已上传/下载?有没有像channel.on_download_complete 这样的东西。 PS我没找到。我正在执行 3 个 ssh 会话来操作文件、下载文件然后删除文件。
    【解决方案2】:

    您考虑过 Net::SFTP 吗?除了那个和 Tempfile,我目前在一个项目中使用它来从本地复制到远程。您还可以进行简单的文件修改。如果您愿意,可以使用 Stream.IO 来编辑文件。

    https://github.com/net-ssh/net-sftp

    http://net-ssh.github.io/net-sftp/

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2011-02-03
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多