Getting unwanted characters when reading command output from SSH server using JSch
Solution 1:
These are ANSI escape codes that are normally interpreted by a terminal client to pretty [color] print the output.
If the server is correctly configured, you get these only, when you use an interactive terminal. In other words, if you requested a pseudo terminal for the session (what you should not, if you are automating the session).
The JSch automatically requests the pseudo terminal, if you used a "shell" channel, as that is supposed to be used for implementing an interactive terminal.
If you automate an execution of remote commands, you better use an "exec" channel, as shown in JSch
Exec.java
example.Alternatively, you can prevent JSch from requesting the pseudo terminal by calling
setPty
. But I do not recommend using "shell" channel. Though if you need to, for whatever reason, you should callsetPty(false)
in any case, as that will prevent many other similar troubles. I actually already recommended that to you in your previous question.
Note to others: While I see why OP uses ls
command, in general, one should use use SFTP API to retrieve a directory listing, instead of executing ls
and parsing its output. Parsing ls
output is a pretty unreliable approach.
Related questions:
- Removing shell stuff (like prompts) from command output in JSch
- Is there a simple way to get rid of junk values that come when you SSH using Python's Paramiko library and fetch output from CLI of a remote machine?