【问题标题】:Public/Private key authentication for Ruby Net::SFTPRuby Net::SFTP 的公钥/私钥身份验证
【发布时间】:2017-11-08 00:55:46
【问题描述】:

我找不到指定 SFTP 身份验证密钥的文档。

想要类似的东西:

export SOME_PRIVATE_KEY="$(cat tmp/some-certs/privatekey.pem)"

# then somewhere in the code
private_key = OpenSSL::PKey::RSA.new(ENV['SOME_PRIVATE_KEY'])

Net::SFTP.start(ftp_host, user, key: private_key) do |sftp|
  sftp.dir.entries('/path/to/folder').each do |remote_file|
     # ...
  end
end

【问题讨论】:

    标签: ruby net-sftp


    【解决方案1】:

    Net::SFTP.start 将其options 哈希直接传递给Net::SSH.start,所以我们应该look to its documentation。它列出了三个看起来相关的选项:

    • :keys => 用于公钥和基于主机的身份验证的私钥文件名数组
    • :key_data => 一个字符串数组,数组的每个元素都是 PEM 格式的原始私钥。
    • :keys_only => 设置为 true 以仅使用来自 keyskey_data 参数的私钥,即使 ssh-agent 提供更多身份。此选项适用于 ssh-agent 提供许多不同身份的情况。

    related question 的答案表明您可能需要同时使用这三个:

    Net::SFTP.start(ftp_host, user,
      key_data: [],
      keys: "tmp/some-certs/privatekey.pem",
      keys_only: true)
    

    如果您想使用来自SOME_PRIVATE_KEY 环境变量的原始密钥数据,它应该如下所示:

    Net::SFTP.start(ftp_host, user,
      key_data: [ ENV["SOME_PRIVATE_KEY"] ],
      keys: [],
      keys_only: true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2015-08-20
      • 2012-10-27
      • 2011-04-10
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多