2009-11-09 9 views
3

Je souhaite pouvoir utiliser SFTP pour me connecter à un certain nombre de serveurs et télécharger certains fichiers pour aider à résoudre les problèmes au fur et à mesure qu'ils surviennent. Alors que nous pouvions utiliser un client, nous voulions commencer à automatiser le processus pour tout rationaliser.Authentification par clé avec net-sftp dans Ruby

Ma première tentative ressemble à ceci:

def download(files_to_download, destination_directory) 
    Net::SFTP.start(@server, @username, :password => @password) do |sftp| 
     files_to_download.each do |f| 
      local_path = File.join(destination_directory, File.basename(f)) 
      sftp.download!(f, local_path) 
     end 
    end 
end 

Bien que cela fonctionne, cela signifie que nous avons besoin du mot de passe. Idéalement, je veux utiliser l'authentification par clé publique, mais je ne vois aucune référence à cela dans la documentation ou en ligne - est-ce possible?

Je préférerais ne pas utiliser chilkat.

Merci

Répondre

6

Il est fait automatiquement, il suffit de télécharger votre clé publique et devrait fonctionner hors de la boîte.

Connexion à l'aide des clés publiques/privées

clés publiques/privées sont toujours essayé avant l'authentification par mot de passe explicite, même si vous fournissez un mot de passe. Ainsi, si vous souhaitez uniquement utiliser l'authentification par clé publique/privée , supprimez simplement le mot de passe de la liste d'arguments. Si vous réussissez à obtenir un handle de session, vos clés sont correctement configurées!

+0

Impressionnant! Je vous remercie. J'ai essayé et je suis maintenant obtenir: c: /ruby/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp.rb: 43: dans 'start » : und méthode définie 'shutdown! ' pour nul: NilClass (NoMethodError) de C: /sourcecode/log_downloader/sftp.rb: 7: 'télécharger » de C: /sourcecode/log_downloader/sftp.rb: 24 Des journaux SSH, il ressemble il ne fait pas la clé publique Accepting, en demandant l'étape de signature que winscp a fait où il m'a demandé d'accepter la clé? Ou le client s'en occupe-t-il pour moi? –

+0

Cela fonctionne-t-il également avec 'Net :: SFTP'? ou est-ce seulement avec 'Net :: SSH'? –

+3

Oui, cela fonctionne également avec Net :: SFTP. Et si vous utilisez Net :: SSH/SFTP v2, vous pouvez passer la clé privée dans .start en tant qu'option: key_data, si l'enregistrer dans un fichier n'est pas une bonne option pour vous. – Ari

9

Si vous souhaitez spécifier directement la clé (ou other SSH options) vous pouvez d'abord open a Net::SSH connection, puis effectuez les opérations SFTP à partir de là.

Net::SSH.start("localhost", "user", keys: ['keys/my_key']) do |ssh| 
    ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz") 
    ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz" 
end 

Cela fonctionne aussi pour Net :: SCP

Net::SSH.start('localhost', 'user', keys: ['keys/my_key']) do |ssh| 
    ssh.scp.download("/local/file.txt", "/remote/file.txt") 
end 
Questions connexes