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

Bla*_*son 4 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.dir.entries('/path/to/folder').each do |remote_file|
     # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 9

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)
Run Code Online (Sandbox Code Playgroud)

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

Net::SFTP.start(ftp_host, user,
  key_data: [ ENV["SOME_PRIVATE_KEY"] ],
  keys: [],
  keys_only: true)
Run Code Online (Sandbox Code Playgroud)