我无法找到指定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
答案 0 :(得分:4)
Net::SFTP.start
将options
哈希直接传递给Net::SSH.start
,因此我们应该look to its documentation。它列出了三个看起来相关的选项:
:keys
=>用于publickey和基于主机的身份验证的私钥文件名数组:key_data
=>一个字符串数组,数组的每个元素都是PEM格式的原始私钥。:keys_only
=>设置为true
仅使用来自keys
和key_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)