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

8
我有些困难,找不到指定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
1个回答

16

Net::SFTP.start方法将其options哈希直接传递给Net::SSH.start,因此我们应该查看相关文档。文档列出了三个相关选项:

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

相关问题的答案表明,您可能需要使用所有三个选项:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接