Ruby Net的公钥/私钥验证:: SFTP
问题描述:
我在查找用于指定SFTP身份验证密钥的文档时遇到问题。Ruby Net的公钥/私钥验证:: 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
直接通过其options
散列Net::SSH.start
,所以我们应该look to its documentation。它列出了一下相关的三个选项:
:keys
=>私钥用于公钥的文件名的数组和基于主机的认证: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)