Bonjour,

Je fais du ssh via le code ci-dessous, tout fonctionne à merveille ... sauf l'affichage en sortie(InputStream stdout) qui tronque systématiquement le premier caractère.Par exemple si je passe la commande sous unix "ls -al"

j'ai le résultat suivant :

rw-r----- 1 root dba 1785 27 jan 10:56 UserInfo.java
rw-r----- 1 root dba 12514 27 jan 10:56 Util.java

à la place de :

drw-r----- 1 root dba 1785 27 jan 10:56 UserInfo.java
-rw-r----- 1 root dba 12514 27 jan 10:56 Util.java

J'ai regardé le code source de Channel.java et il est indiqué au niveau des "stream" : 32*1024 // this value should be customizable.

faut-il modifier ce paramètre.

Merci pour votre aide.

Code : 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
 
public class TestSSH {
    public static Session oSession = null;
 
    public static void main(String[] arg) {
        //String sCommandeRecupSession = ". /app/o3p80/.profile;sqlplus system/manager@demoweb \n set heading on pages 32767 lin 32767 trims ON; \n select count(*) as SESSION_NBR from v$session s; \n select s.sid ||'¤'|| s.serial# ||'¤'|| s.osuser ||'¤'|| s.program ||'¤'|| s.status as SESSION_VALEUR from v$session s; \n exit; \n exit; \n";
		//String sCommandeRecupSession = ". /app/o3p80/.profile;\n sqlplus / as sysdba @test2.sql\n ";
		String sCommandeRecupSession = ". /app/o3p80/.profile;ls -al\n";
 
        try {
            JSch jsch = new JSch();
 
            oSession = jsch.getSession("user", "hostname", 22);
			oSession.setPassword("password");
 
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            oSession.setConfig(config);
 
            oSession.connect();
 
            executeCommand(sCommandeRecupSession);
 
            oSession.disconnect();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
 
    public static int executeCommand(String command) {
        int exitCode = -1;
        ChannelExec channel = null;
		BufferedReader stdoutReader = null;
        BufferedReader stderrReader = null;
        try {
            channel = (ChannelExec) oSession.openChannel("exec");
 
            channel.setCommand(command + "\n");
 
            InputStream stdout = channel.getInputStream();
            InputStream stderr = channel.getErrStream();
 
            channel.connect();
 
            stdoutReader = new BufferedReader(new InputStreamReader(stdout));
            stderrReader = new BufferedReader(new InputStreamReader(stderr));
 
            while (stdoutReader.read() != -1)
                System.out.println(stdoutReader.readLine());
 
            exitCode = channel.getExitStatus();
 
            return exitCode;
        } catch (IOException e) {
            System.out.println("Cannot execute remote command: " + command
                    + " : " + e.getMessage());
        } catch (Exception e) {
            System.out.println("Cannot execute remote command: " + command
                    + " : " + e.getMessage());
        } finally {
            try {
                stdoutReader.close();
                stderrReader.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            if (channel != null) {
                channel.disconnect();
            }
        }
        return exitCode;
    }
}