Java Code Examples for com.jcraft.jsch.ChannelExec#getInputStream()
The following examples show how to use
com.jcraft.jsch.ChannelExec#getInputStream() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RemoteLauncherCommands.java From gemfirexd-oss with Apache License 2.0 | 8 votes |
/** * Connect to a remote host via SSH and execute a command. * * @param host * Host to connect to * @param user * User to login with * @param password * Password for the user * @param command * Command to execute * @return The result of the command execution */ private Result executeSshCommand(final String host, final String user, final String password, final String command) { StringBuilder result = new StringBuilder(); try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); session.setUserInfo(createUserInfo(password)); session.connect(5000); ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand(command); channel.setInputStream(null); channel.setErrStream(System.err); InputStream in = channel.getInputStream(); channel.connect(); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; result.append(new String(tmp, 0, i)); } if (channel.isClosed()) { break; } } channel.disconnect(); session.disconnect(); } catch (Exception jex) { return createResult(Result.Status.ERROR, jex.getMessage()); } return createResult(Result.Status.OK, result.toString()); }
Example 2
Source File: SshExecutor.java From vividus with Apache License 2.0 | 6 votes |
private String readChannelInputStream(ChannelExec channel) throws IOException { try (InputStream in = channel.getInputStream(); InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8); StringWriter stringWriter = new StringWriter()) { while (true) { IOUtils.copy(reader, stringWriter); if (channel.isClosed()) { if (in.available() > 0) { continue; } return stringWriter.toString(); } Sleeper.sleep(Duration.ofSeconds(1)); } } }
Example 3
Source File: JschSupport.java From netbeans with Apache License 2.0 | 5 votes |
/** * Starts the specified command (executable + params) on the specified ExecutionEnvironment. * * @param env - environment to execute in * @param command - executable + params to execute * @param params - (optional) channel params. May be null. * @return I/O streams and opened execution JSch channel. Never returns NULL. * @throws IOException - if unable to aquire an execution channel * @throws JSchException - if JSch exception occured * @throws InterruptedException - if the thread was interrupted */ public static ChannelStreams startCommand(final ExecutionEnvironment env, final String command, final ChannelParams params) throws IOException, JSchException, InterruptedException { JSchWorker<ChannelStreams> worker = new JSchWorker<ChannelStreams>() { @Override public ChannelStreams call() throws JSchException, IOException, InterruptedException { ChannelExec echannel = (ChannelExec) ConnectionManagerAccessor.getDefault().openAndAcquireChannel(env, "exec", true); // NOI18N if (echannel == null) { throw new IOException("Cannot open exec channel on " + env + " for " + command); // NOI18N } echannel.setCommand(command); echannel.setXForwarding(params == null ? false : params.x11forward); InputStream is = echannel.getInputStream(); InputStream es = echannel.getErrStream(); OutputStream os = new ProtectedOutputStream(echannel, echannel.getOutputStream()); Authentication auth = Authentication.getFor(env); echannel.connect(auth.getTimeout() * 1000); return new ChannelStreams(echannel, is, es, os); } @Override public String toString() { return command; } }; return start(worker, env, 2); }
Example 4
Source File: JschSshClient.java From ats-framework with Apache License 2.0 | 5 votes |
/** * * @param command SSH command to execute * @return the exit code */ public int execute( String command, boolean waitForCompletion ) { try { this.command = command; execChannel = (ChannelExec) session.openChannel("exec"); execChannel.setCommand(command); execChannel.setInputStream(null); execChannel.setPty(true); // Allocate a Pseudo-Terminal. Thus it supports login sessions. (eg. /bin/bash // -l) execChannel.connect(); // there is a bug in the other method channel.connect( TIMEOUT ); stdoutThread = new StreamReader(execChannel.getInputStream(), execChannel, "STDOUT"); stderrThread = new StreamReader(execChannel.getErrStream(), execChannel, "STDERR"); stdoutThread.start(); stderrThread.start(); if (waitForCompletion) { stdoutThread.getContent(); stderrThread.getContent(); return execChannel.getExitStatus(); } } catch (Exception e) { throw new JschSshClientException(e.getMessage(), e); } finally { if (waitForCompletion && execChannel != null) { execChannel.disconnect(); } } return -1; }
Example 5
Source File: DeploymentEngine.java From if1007 with MIT License | 5 votes |
private boolean executeSSH(){ //get deployment descriptor, instead of this hard coded. // or execute a script on the target machine which download artifact from nexus String command ="nohup java -jar -Dserver.port=8091 ./work/codebox/chapter6/chapter6.search/target/search-1.0.jar &"; try{ System.out.println("Executing "+ command); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session=jsch.getSession("rajeshrv", "localhost", 22); session.setPassword("rajeshrv"); session.setConfig(config); session.connect(); System.out.println("Connected"); ChannelExec channelExec = (ChannelExec)session.openChannel("exec"); InputStream in = channelExec.getInputStream(); channelExec.setCommand(command); channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; int index = 0; while ((line = reader.readLine()) != null) { System.out.println(++index + " : " + line); } channelExec.disconnect(); session.disconnect(); System.out.println("Done!"); }catch(Exception e){ e.printStackTrace(); return false; } return true; }
Example 6
Source File: DeploymentEngine.java From Microservices-Building-Scalable-Software with MIT License | 5 votes |
private boolean executeSSH(){ //get deployment descriptor, instead of this hard coded. // or execute a script on the target machine which download artifact from nexus String command ="nohup java -jar -Dserver.port=8091 ./work/codebox/chapter6/chapter6.search/target/search-1.0.jar &"; try{ System.out.println("Executing "+ command); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session=jsch.getSession("rajeshrv", "localhost", 22); session.setPassword("rajeshrv"); session.setConfig(config); session.connect(); System.out.println("Connected"); ChannelExec channelExec = (ChannelExec)session.openChannel("exec"); InputStream in = channelExec.getInputStream(); channelExec.setCommand(command); channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; int index = 0; while ((line = reader.readLine()) != null) { System.out.println(++index + " : " + line); } channelExec.disconnect(); session.disconnect(); System.out.println("Done!"); }catch(Exception e){ e.printStackTrace(); return false; } return true; }
Example 7
Source File: DeploymentEngine.java From Spring-Microservices with MIT License | 5 votes |
private boolean executeSSH(){ //get deployment descriptor, instead of this hard coded. // or execute a script on the target machine which download artifact from nexus String command ="nohup java -jar -Dserver.port=8091 ./work/codebox/chapter6/chapter6.search/target/search-1.0.jar &"; try{ System.out.println("Executing "+ command); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch(); Session session=jsch.getSession("rajeshrv", "localhost", 22); session.setPassword("rajeshrv"); session.setConfig(config); session.connect(); System.out.println("Connected"); ChannelExec channelExec = (ChannelExec)session.openChannel("exec"); InputStream in = channelExec.getInputStream(); channelExec.setCommand(command); channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; int index = 0; while ((line = reader.readLine()) != null) { System.out.println(++index + " : " + line); } channelExec.disconnect(); session.disconnect(); System.out.println("Done!"); }catch(Exception e){ e.printStackTrace(); return false; } return true; }
Example 8
Source File: RemoteLauncherCommands.java From gemfirexd-oss with Apache License 2.0 | 5 votes |
/** * Connect to a remote host via SSH and execute a command. * * @param host * Host to connect to * @param user * User to login with * @param password * Password for the user * @param command * Command to execute * @return The result of the command execution */ private Result executeSshCommand(final String host, final String user, final String password, final String command) { StringBuilder result = new StringBuilder(); try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); session.setUserInfo(createUserInfo(password)); session.connect(5000); ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand(command); channel.setInputStream(null); channel.setErrStream(System.err); InputStream in = channel.getInputStream(); channel.connect(); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; result.append(new String(tmp, 0, i)); } if (channel.isClosed()) { break; } } channel.disconnect(); session.disconnect(); } catch (Exception jex) { return createResult(Result.Status.ERROR, jex.getMessage()); } return createResult(Result.Status.OK, result.toString()); }
Example 9
Source File: RemoteCredentialsSupport.java From kork with Apache License 2.0 | 5 votes |
static RemoteCredentials getRemoteCredentials( String command, String user, String host, int port) { RemoteCredentials remoteCredentials = new RemoteCredentials(); try { Session session = jsch.getSession(user, host, port); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); config.put("PreferredAuthentications", "publickey"); config.put("HashKnownHosts", "yes"); session.setConfig(config); session.setPassword(""); session.connect(); ChannelExec channel = (ChannelExec) session.openChannel("exec"); InputStream is = channel.getInputStream(); channel.setCommand(command); channel.connect(); String output = IOUtils.toString(is); log.debug("Remote credentials: {}", output); channel.disconnect(); session.disconnect(); output = output.replace("\n", ""); remoteCredentials = objectMapper.readValue(output, RemoteCredentials.class); } catch (Exception e) { log.error("Remote SSH execution failed.", e); } return remoteCredentials; }
Example 10
Source File: SftpFileSystem.java From commons-vfs with Apache License 2.0 | 5 votes |
/** * Executes a command and returns the (standard) output through a StringBuilder. * * @param command The command * @param output The output * @return The exit code of the command * @throws JSchException if a JSch error is detected. * @throws FileSystemException if a session cannot be created. * @throws IOException if an I/O error is detected. */ private int executeCommand(final String command, final StringBuilder output) throws JSchException, IOException { final ChannelExec channel = (ChannelExec) getSession().openChannel("exec"); try { channel.setCommand(command); channel.setInputStream(null); try (final InputStreamReader stream = new InputStreamReader(channel.getInputStream())) { channel.setErrStream(System.err, true); channel.connect(connectTimeoutMillis); // Read the stream final char[] buffer = new char[EXEC_BUFFER_SIZE]; int read; while ((read = stream.read(buffer, 0, buffer.length)) >= 0) { output.append(buffer, 0, read); } } // Wait until the command finishes (should not be long since we read the output stream) while (!channel.isClosed()) { try { Thread.sleep(SLEEP_MILLIS); } catch (final Exception ee) { // TODO: swallow exception, really? } } } finally { channel.disconnect(); } return channel.getExitStatus(); }
Example 11
Source File: SftpFileSystemWindows.java From pentaho-kettle with Apache License 2.0 | 5 votes |
/** * * {@link org.apache.commons.vfs2.provider.sftp.SftpFileSystem#executeCommand(java.lang.String, java.lang.StringBuilder) } */ private int executeCommand( String command, StringBuilder output ) throws JSchException, IOException { this.ensureSession(); ChannelExec channel = (ChannelExec) this.session.openChannel( "exec" ); channel.setCommand( command ); channel.setInputStream( (InputStream) null ); InputStreamReader stream = new InputStreamReader( channel.getInputStream() ); channel.setErrStream( System.err, true ); channel.connect(); char[] buffer = new char[128]; int read; while ( ( read = stream.read( buffer, 0, buffer.length ) ) >= 0 ) { output.append( buffer, 0, read ); } stream.close(); while ( !channel.isClosed() ) { try { Thread.sleep( 100L ); } catch ( Exception exc ) { log.logMinimal( "Warning: Error session closing. " + exc.getMessage() ); } } channel.disconnect(); return channel.getExitStatus(); }
Example 12
Source File: GitRepo.java From warnings-ng-plugin with MIT License | 4 votes |
/** * Zip bare repository, copy to Docker container using sftp, then unzip. The repo is now accessible over * "ssh://git@ip:port/home/git/gitRepo.git" * * @param host * IP of Docker container * @param port * SSH port of Docker container */ public void transferToDockerContainer(String host, int port) { try { Path zipPath = Files.createTempFile("git", "zip"); File zippedRepo = zipPath.toFile(); String zippedFilename = zipPath.getFileName().toString(); ZipUtil.pack(new File(dir.getPath()), zippedRepo); Properties props = new Properties(); props.put("StrictHostKeyChecking", "no"); JSch jSch = new JSch(); jSch.addIdentity(privateKey.getAbsolutePath()); Session session = jSch.getSession("git", host, port); session.setConfig(props); session.connect(); ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); channel.connect(); channel.cd("/home/git"); channel.put(new FileInputStream(zippedRepo), zippedFilename); ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); InputStream in = channelExec.getInputStream(); channelExec.setCommand("unzip " + zippedFilename + " -d " + REPO_NAME); channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; int index = 0; while ((line = reader.readLine()) != null) { System.out.println(++index + " : " + line); } channelExec.disconnect(); channel.disconnect(); session.disconnect(); // Files.delete(zipPath); } catch (IOException | JSchException | SftpException e) { throw new AssertionError("Can't transfer git repository to docker container", e); } }
Example 13
Source File: JschServiceImpl.java From jwala with Apache License 2.0 | 4 votes |
/** * Read the remote output for the exec channel. This is the code provided on the jcraft site with a timeout added. * * @param channelExec the exec channel * @param timeout the maximum period of time for reading the channel output * @return the output from the channel * @throws IOException for any issues encoutered when retrieving the input stream from the channel */ private String readExecRemoteOutput(ChannelExec channelExec, long timeout) throws IOException { final BufferedInputStream bufIn = new BufferedInputStream(channelExec.getInputStream()); final StringBuilder outputBuilder = new StringBuilder(); final byte[] tmp = new byte[BYTE_CHUNK_SIZE]; final long startTime = System.currentTimeMillis(); final long readLoopSleepTime = Long.parseLong(ApplicationProperties.get( JSCH_EXEC_READ_REMOTE_OUTPUT_LOOP_SLEEP_TIME.getPropertyName(), READ_LOOP_SLEEP_TIME_DEFAULT_VALUE)); while (true) { // read the stream while (bufIn.available() > 0) { int i = bufIn.read(tmp, 0, BYTE_CHUNK_SIZE); if (i < 0) { break; } outputBuilder.append(new String(tmp, 0, i, StandardCharsets.UTF_8)); } // check if the channel is closed if (channelExec.isClosed()) { // check for any more bytes on the input stream sleep(readLoopSleepTime); if (bufIn.available() > 0) { continue; } LOGGER.debug("exit-status: {}", channelExec.getExitStatus()); break; } // check timeout if ((System.currentTimeMillis() - startTime) > timeout) { LOGGER.warn("Remote exec output reading timeout!"); break; } // If for some reason the channel is not getting closed, we should not hog CPU time with this loop hence // we sleep for a while sleep(readLoopSleepTime); } return outputBuilder.toString(); }
Example 14
Source File: SshProvider.java From parallec with Apache License 2.0 | 4 votes |
/** * Seems there are bad naming in the library the sysout is in * channel.getInputStream(); the syserr is in * ((ChannelExec)channel).setErrStream(os); * * @param channel * the channel * @return the response on singe request */ public ResponseOnSingeRequest executeAndGenResponse(ChannelExec channel) { ResponseOnSingeRequest sshResponse = new ResponseOnSingeRequest(); InputStream in = null; OutputStream outputStreamStdErr = new ByteArrayOutputStream(); StringBuilder sbStdOut = new StringBuilder(); try { in = channel.getInputStream(); channel.setErrStream(outputStreamStdErr); byte[] tmp = new byte[ParallecGlobalConfig.sshBufferSize]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, ParallecGlobalConfig.sshBufferSize); if (i < 0) break; sbStdOut.append(new String(tmp, 0, i)); } if (channel.isClosed()) { if (in.available() > 0) continue; sshResponse.setFailObtainResponse(false); // exit 0 is good int exitStatus = channel.getExitStatus(); sshResponse.setStatusCodeInt(exitStatus); sshResponse.setStatusCode(Integer.toString(exitStatus)); break; } Thread.sleep(ParallecGlobalConfig.sshSleepMIllisBtwReadBuffer); } sshResponse.setResponseBody(sbStdOut.toString()); sshResponse.setErrorMessage(outputStreamStdErr.toString()); sshResponse.setReceiveTimeNow(); } catch (Exception t) { throw new RuntimeException(t); } return sshResponse; }
Example 15
Source File: TCPConnection.java From Robot-Overlord-App with GNU General Public License v2.0 | 4 votes |
/** * Open a connection to a device on the net. * The ipAddress format is a normal URI - name:password@ipaddress:port * @param ipAddress the network address of the device */ @Override public void openConnection(String ipAddress) throws Exception { if (portOpened) return; closeConnection(); jsch.setKnownHosts("./.ssh/known_hosts"); if(ipAddress.startsWith("http://")) { ipAddress = ipAddress.substring(7); } // the string input URL a = new URL("http://"+ipAddress); String host = a.getHost(); int port = a.getPort(); String userInfo = a.getUserInfo(); if(port==-1) port = DEFAULT_TCP_PORT; String [] userParts = userInfo.split(":"); // now we have everything we need session = jsch.getSession(userParts[0], host, port); session.setUserInfo(new MyUserInfo()); session.setPassword(userParts[1]); session.connect(30000); // making a connection with timeout. channel = (ChannelExec)session.openChannel("exec"); Log.message("Sending "+SHELL_TO_SERIAL_COMMAND); channel.setCommand(SHELL_TO_SERIAL_COMMAND); channel.connect(); // remember the data streams inputStream = new BufferedReader(new InputStreamReader(channel.getInputStream())); outputStream = new PrintWriter(channel.getOutputStream()); connectionName = ipAddress; portOpened = true; waitingForCue = true; keepPolling=true; thread = new Thread(this); thread.start(); }