J'essaie de récupérer un fichier à partir d'un serveur en utilisant SFTP (par opposition à FTPS) en utilisant Java. Comment puis-je faire ceci?
228
Une autre option consiste à envisager de consulter la bibliothèque JSch . JSch semble être la bibliothèque préférée pour quelques grands projets open source, y compris Eclipse, Ant et Apache Commons HttpClient, entre autres.
Il prend en charge à la fois les connexions utilisateur / passe et basées sur des certificats, ainsi que toute une foule d'autres fonctionnalités SSH2 délicieuses.
Voici un simple fichier distant récupéré via SFTP. La gestion des erreurs est laissée en exercice au lecteur :-)
JSch jsch = new JSch();
String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts( knownHostsFilename );
Session session = jsch.getSession( "remote-username", "remote-host" );
{
// "interactive" version
// can selectively update specified known_hosts file
// need to implement UserInfo interface
// MyUserInfo is a swing implementation provided in
// examples/Sftp.java in the JSch dist
UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
// OR non-interactive version. Relies in host key being in known-hosts file
session.setPassword( "remote-password" );
}
session.connect();
Channel channel = session.openChannel( "sftp" );
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("remote-file", "local-file" );
// OR
InputStream in = sftpChannel.get( "remote-file" );
// process inputstream as needed
sftpChannel.exit();
session.disconnect();
Voici le code source complet d'un exemple utilisant JSch sans avoir à vous soucier de la vérification de la clé ssh.
la source
finally
bloc doit être utilisé pour inclure le code de nettoyage de canal, pour garantir qu'il s'exécute toujours.com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
Voici un exemple d'utilisation d'Apache Common VFS:
la source
C'est la solution que j'ai trouvée avec http://sourceforge.net/projects/sshtools/ (la plupart des erreurs de gestion ont été omises pour plus de clarté). Ceci est un extrait de mon blog
la source
Une belle abstraction au-dessus de Jsch est Apache commons-vfs qui offre une API de système de fichiers virtuel qui rend l'accès et l'écriture des fichiers SFTP presque transparents. A bien fonctionné pour nous.
la source
Il y a une belle comparaison des 3 bibliothèques Java matures pour SFTP: Commons VFS, SSHJ et JSch
Pour résumer, SSHJ possède l'API la plus claire et c'est la meilleure d'entre elles si vous n'avez pas besoin d'autres supports de stockage fournis par Commons VFS.
Voici un exemple SSHJ édité de github :
la source
Fichier de propriétés Java commun pour tous les exemples
serverAddress = 111.222.333.444
userId = myUserId
mot de passe = myPassword
remoteDirectory = produits /
localDirectory = import /
la source
hierynomus / sshj a une implémentation complète de SFTP version 3 (ce qu'OpenSSH implémente)
Exemple de code de SFTPUpload.java
la source
La bibliothèque JSch est la bibliothèque puissante qui peut être utilisée pour lire des fichiers à partir du serveur SFTP. Voici le code testé pour lire le fichier de l'emplacement SFTP ligne par ligne
Veuillez consulter le blog pour l'ensemble du programme.
la source
Andy, pour supprimer un fichier sur un système distant, vous devez utiliser
(channelExec)
JSch et passer des commandes unix / linux pour le supprimer.la source
Essayez edtFTPj / PRO , une bibliothèque client SFTP mature et robuste qui prend en charge les pools de connexions et les opérations asynchrones. Prend également en charge FTP et FTPS afin que toutes les bases du transfert de fichiers sécurisé soient couvertes.
la source
J'ai trouvé un exemple de travail complet pour SFTP en Java à l'aide de l'API JSCH http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
la source
Bien que les réponses ci-dessus aient été très utiles, j'ai passé une journée à les faire fonctionner, face à diverses exceptions comme "canal cassé", "clé rsa inconnue" et "paquet corrompu".
Vous trouverez ci-dessous une classe réutilisable fonctionnelle pour le téléchargement / téléchargement de fichiers SFTP à l'aide de la bibliothèque JSch.
Utilisation de téléchargement:
Utilisation du téléchargement:
Le code de classe:
la source
Vous avez également JFileUpload avec le module complémentaire SFTP (Java aussi): http://www.jfileupload.com/products/sftp/index.html
la source
J'utilise cette API SFTP appelée Zehon, c'est génial, si facile à utiliser avec beaucoup d'exemples de code. Voici le site http://www.zehon.com
la source
La meilleure solution que j'ai trouvée est Paramiko . Il existe une version Java.
la source