7

我希望能够使用 SFTP 登录到多个服务器并下载某些文件以帮助在问题出现时进行调试。虽然我们可以使用客户端,但我们希望开始自动化流程以简化一切。

我的第一次尝试看起来像这样:

def download(files_to_download, destination_directory)
    Net::SFTP.start(@server, @username, :password => @password) do |sftp|
        files_to_download.each do |f|
            local_path = File.join(destination_directory, File.basename(f))
            sftp.download!(f, local_path)
        end
    end
end

虽然这有效,但这意味着我们需要密码。理想情况下,我想使用公钥身份验证,但是我在文档或在线中看不到对此的任何引用——这可能吗?

我宁愿不使用chilkat。

谢谢

4

2 回答 2

11

如果您想直接指定密钥(或其他 SSH 选项),您可以先打开 Net::SSH 连接,然后从那里进行 SFTP 操作。

Net::SSH.start("localhost", "user", keys: ['keys/my_key']) do |ssh|
  ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
  ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
end

这也适用于 Net::SCP

Net::SSH.start('localhost', 'user', keys: ['keys/my_key'] ) do |ssh|
  ssh.scp.download("/local/file.txt", "/remote/file.txt")
end
于 2014-09-23T22:24:37.273 回答
8

它是自动完成的,只需上传您的公钥,就可以开箱即用。

使用公钥/私钥连接

即使您提供了密码,也总是在显式密码身份验证之前尝试公钥/私钥。因此,如果您只想使用公钥/私钥身份验证,只需从参数列表中删除密码即可。如果您可以成功获得会话句柄,那么您的密钥设置正确!

于 2009-11-09T13:48:10.137 回答