2017-06-06 151 views
1

我在查找用于指定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 

回答

1

Net::SFTP.start直接通过其options散列Net::SSH.start,所以我们应该look to its documentation。它列出了一下相关的三个选项:

  • :keys =>私钥用于公钥的文件名的数组和基于主机的认证
  • :key_data =>字符串数组,其中的每一个元素阵列是PEM格式的原始私钥。
  • :keys_only =>设置为true仅使用keyskey_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)