2017-06-06 123 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)