Ruby Net::SFTP的公钥/私钥身份验证

Ruby Net::SFTP的公钥/私钥身份验证,ruby,net-sftp,Ruby,Net Sftp,我很难找到为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身份验证指定密钥的文档

我想要一些类似于:

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

Net::SFTP.start
将其
选项
散列直接传递给
Net::SSH.start
,因此我们应该这样做。它列出了三个看起来相关的选项:

  • :密钥
    =>用于公钥和基于主机的身份验证的私钥文件名数组
  • :key_data
    =>字符串数组,数组中的每个元素都是PEM格式的原始私钥
  • :仅密钥
    =>设置为
    true
    以仅使用
    密钥
    密钥数据
    参数中的私钥,即使ssh代理提供了更多标识。此选项适用于ssh代理提供许多不同标识的情况
a的答案建议您可能需要使用这三个选项:

Net::SFTP.start(ftp_host, user,
  key_data: [],
  keys: "tmp/some-certs/privatekey.pem",
  keys_only: true)
如果要使用
SOME\u PRIVATE\u key
环境变量中的原始密钥数据,它应该如下所示:

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