jsch


How to read JSch command output?


I have the following code:
JSch jsch = new JSch();
jsch.setKnownHosts(dotSshDir + "/known_hosts");
jsch.addIdentity(dotSshDir + "/id_rsa");
Session session = jsch.getSession(userName, hostname, 22);
session.connect();
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(null);
channel.setErrStream(System.err);
Reader reader = new InputStreamReader(channel.getInputStream());
char[] buf = new char[1024];
int numRead;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
result.append(readData);
buf = new char[1024];
}
It's hanging trying to read from the reader. How do I fix this? How do I go about hunting down what's happening?
The hanging was actually due to some unbalanced quotes in the command.
For posterity, the final code (after dealing with some other issues) is:
public String call(String hostname, String[] argv) throws SubprocessException {
StringBuffer result = new StringBuffer();
Session session = null;
ChannelExec channel = null;
try {
// TODO: Emit friendly error if ~/.ssh doesn't exist.
String dotSshDir = System.getProperty("user.home") + "/.ssh";
String userName = System.getProperty("user.name");
// TODO: Emit friendly error if ~/.ssh/known_hosts doesn't exist.
jSch.setKnownHosts(dotSshDir + "/known_hosts");
// TODO: Emit friendly error if ~/.ssh/id_rsa doesn't exist.
jSch.addIdentity(dotSshDir + "/id_rsa");
session = jSch.getSession(userName, hostname, 22);
session.connect();
channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(Joiner.on(" ").join(argv));
channel.setInputStream(null);
InputStream stdout = channel.getInputStream();
InputStream stderr = channel.getErrStream();
channel.connect();
waitForChannelClosed(channel);
if (channel.getExitStatus() != 0) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stderr));
readAll(bufferedReader, result);
throw new Exception(result.toString());
} else {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stdout));
readAll(bufferedReader, result);
}
} catch (Exception e) {
throw new SubprocessException(e);
} finally {
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
return result.toString();
}

Related Links

Creating a new file in SSH enabled system using JSCH
How to interact with the script after its execution using Jsch
java jsch -executing multiple unix commands
How to get one stream from error stream and input stream when calling a script using JSCH
SFTP using jschexception verify false sometimes fails
how to increase the jsch buffer size?
The cipher 'aes256-cbc' is required, but it is not available
How to pause/resume procedure while/after upload file by ChannelSftp
jsch + running multiple command in shell after SU and then close channal
NGit/Nsch Generating SSH Keypair (c# Jgit)
Extract userInfo from JSCH stream
Running a Shell Script using java ( process Builder ) with a specific unix user
Java jsch and resuming file upload after interruption?
How to pass a variable through channel in Jsch?
How to handle passwords prompts in expectj
Retaining the last modified date while using ChannelSftp for file transfer

Categories

HOME
proxy
openstack
kde
comparison
raspberry-pi
setup-deployment
microservices
twitter-bootstrap-4
retrofit
installshield
esper
medical
reveal.js
midi
etl
static-libraries
graphlab
openrefine
shared-hosting
google-pagespeed
visual-composer
visjs
java-3d
sox
accessor
autosys
microsoft-sync-framework
kannel
elasticsearch-net
facebook-apps
libssl
bpel
fabric8
key-value-observing
calibre
bower-install
overlap
scaffold
xenforo
angularjs-factory
temporary-files
elmah
wso2carbon
qwt
youcompleteme
upstart
blogengine.net
nativeapplication
np-complete
r-forge
chord-diagram
background-service
nxt
vmware-tools
httplistener
paypal-express
gstreamer-0.10
nsviewcontroller
ready-api
qgraphicsview
make-install
qtableview
cartesian-product
teamcity-8.0
icu4j
marching-cubes
jmeter-maven-plugin
coveralls
jsonpickle
pick
tablelayout
java.util.concurrent
bitcoinj
funcunit
html5-notifications
gnu-smalltalk
pyhdf
excel-2003
cos
eclipse-memory-analyzer
seed
comaddin
smtp-auth
labwindows
twrequest
hosts-file
eclipse-templates
fireworks
nsobject
doh
deobfuscation
createwindow
compiler-specific
brewmp
photoshop-cs4
pascal-fc
sector
dbisam

Resources

Database Users
RDBMS discuss
Database Dev&Adm
javascript
java
csharp
php
android
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App