use of com.jcraft.jsch.JSchException in project voltdb by VoltDB.
the class SFTPSession method pipeListToShellCommand.
/**
* Executes the given command with the given list as its input
*
* @param list input
* @param command command to execute on remote host
* @return the output of the command as a list
* @throws {@link SSHException} when an error occurs during SSH
* command performed by this method
*/
public List<String> pipeListToShellCommand(final Collection<String> list, final String command) {
Preconditions.checkArgument(command != null && !command.trim().isEmpty(), "specified empty or null command string");
Preconditions.checkState(m_channel != null, "stale session");
ChannelExec e = null;
BufferedReader sherr = null;
BufferedReader shout = null;
List<String> shellout = new ArrayList<String>();
try {
try {
e = (ChannelExec) m_channel.getSession().openChannel("exec");
} catch (JSchException jex) {
throw new SSHException("opening ssh exec channel", jex);
}
try {
shout = new BufferedReader(new InputStreamReader(e.getInputStream(), Charsets.UTF_8));
} catch (IOException ioex) {
throw new SSHException("geting exec channel input stream", ioex);
}
try {
sherr = new BufferedReader(new InputStreamReader(e.getErrStream(), Charsets.UTF_8));
} catch (IOException ioex) {
throw new SSHException("getting exec channel error stream", ioex);
}
if (list != null && !list.isEmpty()) {
e.setInputStream(listAsInputStream(list));
}
e.setCommand(command);
try {
e.connect(5000);
int retries = 50;
while (!e.isClosed() && retries-- > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException ignoreIt) {
}
}
if (retries < 0) {
throw new SSHException("'" + command + "' timed out");
}
} catch (JSchException jex) {
throw new SSHException("executing '" + command + "'", jex);
}
try {
String outputLine = shout.readLine();
while (outputLine != null) {
shellout.add(outputLine);
outputLine = shout.readLine();
}
} catch (IOException ioex) {
throw new SSHException("capturing '" + command + "' output", ioex);
}
if (e.getExitStatus() != 0) {
try {
String errorLine = sherr.readLine();
while (errorLine != null) {
shellout.add(errorLine);
errorLine = sherr.readLine();
}
} catch (IOException ioex) {
throw new SSHException("capturing '" + command + "' error", ioex);
}
throw new SSHException("error output from '" + command + "':\n\t" + join(shellout, "\n\t"));
}
if (m_log.isDebugEnabled()) {
m_log.debug("SSH: " + command);
}
} finally {
if (sherr != null)
try {
sherr.close();
} catch (Exception ignoreIt) {
}
if (shout != null)
try {
shout.close();
} catch (Exception ignoreIt) {
}
}
return shellout;
}
use of com.jcraft.jsch.JSchException in project bamboobsc by billchen198318.
the class SFtpClientUtils method put.
/**
* 本地檔案放到遠端SFTP上
*
* @param user
* @param password
* @param addr
* @param port
* @param localFile
* @param remoteFile
* @throws JSchException
* @throws SftpException
* @throws Exception
*/
public static void put(String user, String password, String addr, int port, List<String> localFile, List<String> remoteFile) throws JSchException, SftpException, Exception {
Session session = getSession(user, password, addr, port);
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
try {
for (int i = 0; i < localFile.size(); i++) {
String rf = remoteFile.get(i);
String lf = localFile.get(i);
logger.info("put local file: " + lf + " write to " + addr + " :" + rf);
sftpChannel.put(lf, rf);
logger.info("success write to " + addr + " :" + rf);
}
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
sftpChannel.exit();
channel.disconnect();
session.disconnect();
}
}
use of com.jcraft.jsch.JSchException in project bamboobsc by billchen198318.
the class SFtpClientUtils method get.
/**
* 抓遠端檔案然後存到本機 , 單筆
*
* @param user
* @param password
* @param addr
* @param port
* @param remoteFile
* @param localFile
* @throws JSchException
* @throws SftpException
* @throws Exception
*/
public static void get(String user, String password, String addr, int port, String remoteFile, String localFile) throws JSchException, SftpException, Exception {
Session session = getSession(user, password, addr, port);
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
logger.info("get remote file: " + remoteFile + " write to:" + localFile);
try {
sftpChannel.get(remoteFile, localFile);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
sftpChannel.exit();
channel.disconnect();
session.disconnect();
}
File f = new File(localFile);
if (!f.exists()) {
f = null;
logger.error("get remote file:" + remoteFile + " fail!");
throw new Exception("get remote file:" + remoteFile + " fail!");
}
f = null;
logger.info("success write:" + localFile);
}
use of com.jcraft.jsch.JSchException in project bamboobsc by billchen198318.
the class SFtpClientUtils method getRemoteFileList.
@SuppressWarnings("unchecked")
public static Vector<LsEntry> getRemoteFileList(String user, String password, String addr, int port, String cwd) throws JSchException, SftpException, Exception {
Session session = getSession(user, password, addr, port);
Vector<LsEntry> lsVec = null;
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
try {
//sftpChannel.lpwd()
lsVec = (Vector<LsEntry>) sftpChannel.ls(cwd);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
sftpChannel.exit();
channel.disconnect();
session.disconnect();
}
return lsVec;
}
use of com.jcraft.jsch.JSchException in project cdap by caskdata.
the class SFTPInputStream method close.
public synchronized void close() throws IOException {
if (closed) {
return;
}
super.close();
closed = true;
if (!channel.isConnected()) {
throw new IOException(E_CLIENT_NOTCONNECTED);
}
try {
Session session = channel.getSession();
channel.disconnect();
session.disconnect();
} catch (JSchException e) {
throw new IOException(StringUtils.stringifyException(e));
}
}
Aggregations