Bonjour,
je suis en train de développer un outil sous windows qui doit se connecter à un serveur unix afin d'y exécuter des scripts qui génèrent un fichier
que je souhaite rappatrier du coté windows.
Pour cela j'utilise l'API JSch, cependant je n'arrive pas à faire le scp avec cette api.
Je me suis fortement inspiré des exemples qu'ils donnent sur le site de Jsch (http://www.jcraft.com/jsch/examples/), cependant sans succès
voici mon code
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public static void scpDistantFile(String filename, String localname){ try{ JSch jsch=new JSch(); Session session=jsch.getSession(user, host, port); UserInfo ui=new MyUserInfo(user,password); session.setUserInfo(ui); session.connect(); // exec 'scp -f rfile' remotely String command="scp -p "+filename; Channel channel=session.openChannel("exec"); ((ChannelExec)channel).setCommand(command); // get I/O streams for remote scp OutputStream out= new FileOutputStream(new File(localname)); InputStream in=channel.getInputStream(); channel.connect(); int read=0; byte[] bytes = new byte[1024]; while((read = in.read(bytes))!= -1){ out.write(bytes, 0, read); } in.close(); out.flush(); out.close(); System.out.println("New file created!"); session.disconnect(); }catch(Exception e){ e.printStackTrace(); } }
Dans l'exemple ils disaient de faire le scp avec un "-f" cependant dans les pages de man je n'ai pas trouvé cette option, en tout
cas pas en minuscule. J'ai donc testé sans rien, avec "-p" mais sans succès, le "in.read(bytes)" me retour systématiquement -1.
De plus je trouve étrange que la commande que l'on passe n'ai qu'un seul argument, normalement un scp prend le fichier source et dest.
Il y a peut être un moyen plus simple de faire ce que je souhaite faire.
Si quelqu'un à une idée... merci d'avance
Partager