use of com.jcraft.jsch.ChannelExec in project azure-sdk-for-java by Azure.
the class TestVirtualMachineCustomData method createResource.
@Override
public VirtualMachine createResource(VirtualMachines virtualMachines) throws Exception {
final String vmName = "vm" + this.testId;
final String publicIpDnsLabel = SdkContext.randomResourceName("abc", 16);
// Prepare the custom data
//
String cloudInitFilePath = getClass().getClassLoader().getResource("cloud-init").getPath();
// In Windows remove leading slash
cloudInitFilePath = cloudInitFilePath.replaceFirst("^/(.:/)", "$1");
byte[] cloudInitAsBytes = Files.readAllBytes(Paths.get(cloudInitFilePath));
byte[] cloudInitEncoded = Base64.encodeBase64(cloudInitAsBytes);
String cloudInitEncodedString = new String(cloudInitEncoded);
PublicIPAddress pip = pips.define(publicIpDnsLabel).withRegion(Region.US_EAST).withNewResourceGroup().withLeafDomainLabel(publicIpDnsLabel).create();
VirtualMachine vm = virtualMachines.define(vmName).withRegion(pip.regionName()).withExistingResourceGroup(pip.resourceGroupName()).withNewPrimaryNetwork("10.0.0.0/28").withPrimaryPrivateIPAddressDynamic().withExistingPrimaryPublicIPAddress(pip).withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS).withRootUsername("testuser").withRootPassword("12NewPA$$w0rd!").withCustomData(cloudInitEncodedString).withSize(VirtualMachineSizeTypes.STANDARD_D3_V2).create();
pip.refresh();
Assert.assertTrue(pip.hasAssignedNetworkInterface());
if (!MockIntegrationTestBase.IS_MOCKED) {
JSch jsch = new JSch();
Session session = null;
ChannelExec channel = null;
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session = jsch.getSession("testuser", publicIpDnsLabel + "." + "eastus.cloudapp.azure.com", 22);
session.setPassword("12NewPA$$w0rd!");
session.setConfig(config);
session.connect();
// Try running the package installed via init script
//
channel = (ChannelExec) session.openChannel("exec");
BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()));
channel.setCommand("pwgen;");
channel.connect();
String msg;
while ((msg = in.readLine()) != null) {
Assert.assertFalse(msg.startsWith("The program 'pwgen' is currently not installed"));
}
} catch (Exception e) {
Assert.fail("SSH connection failed" + e.getMessage());
} finally {
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
}
return vm;
}
use of com.jcraft.jsch.ChannelExec in project GNS by MobilityFirst.
the class SSHClient method scpTo.
/**
*
* @param user
* @param host
* @param keyFile
* @param lfile
* @param rfile
*/
public static void scpTo(String user, String host, File keyFile, String lfile, String rfile) {
if (verbose) {
System.out.println("Remote copy file from " + lfile + " to " + host + "@" + user + ":" + rfile);
}
FileInputStream fis = null;
try {
JSch jsch = new JSch();
Session session = authenticateWithKey(jsch, user, host, keyFile);
// username and password will be given via UserInfo interface.
UserInfo ui = new UserInfoPrompted();
session.setUserInfo(ui);
session.connect();
boolean ptimestamp = true;
// exec 'scp -t rfile' remotely
String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + rfile;
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// get I/O streams for remote scp
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();
int ack = checkAck(in);
if (ack != 0) {
System.out.println("ACK was " + ack);
return;
}
File _lfile = new File(lfile);
if (ptimestamp) {
command = "T " + (_lfile.lastModified() / 1000) + " 0";
// The access time should be sent here,
// but it is not accessible with JavaAPI ;-<
command += (" " + (_lfile.lastModified() / 1000) + " 0\n");
out.write(command.getBytes());
out.flush();
ack = checkAck(in);
if (ack != 0) {
System.out.println("ACK was " + ack);
return;
}
}
// send "C0644 filesize filename", where filename should not include '/'
long filesize = _lfile.length();
command = "C0644 " + filesize + " ";
if (lfile.lastIndexOf('/') > 0) {
command += lfile.substring(lfile.lastIndexOf('/') + 1);
} else {
command += lfile;
}
command += "\n";
out.write(command.getBytes());
out.flush();
ack = checkAck(in);
if (ack != 0) {
System.out.println("ACK was " + ack);
return;
}
// send a content of lfile
fis = new FileInputStream(lfile);
byte[] buf = new byte[1024];
while (true) {
int len = fis.read(buf, 0, buf.length);
if (len <= 0) {
break;
}
//out.flush();
out.write(buf, 0, len);
}
fis.close();
fis = null;
// send '\0'
buf[0] = 0;
out.write(buf, 0, 1);
out.flush();
ack = checkAck(in);
if (ack != 0) {
System.out.println("ACK was " + ack);
return;
}
out.close();
channel.disconnect();
session.disconnect();
} catch (JSchException | IOException e) {
GNSConfig.getLogger().severe(e.toString());
try {
if (fis != null) {
fis.close();
}
} catch (Exception ee) {
}
}
}
use of com.jcraft.jsch.ChannelExec in project GNS by MobilityFirst.
the class SSHClient method exec.
/**
*
* @param user
* @param host
* @param keyFile
* @param command
* @param useSudo
* @param sudoPasswd
*/
public static void exec(String user, String host, File keyFile, String command, boolean useSudo, String sudoPasswd) {
if (verbose) {
System.out.println("Remote execute command on " + host + (useSudo ? " as root user: " : " as user " + user + ": ") + command);
}
try {
JSch jsch = new JSch();
Session session = authenticateWithKey(jsch, user, host, keyFile);
// username and password will be given via UserInfo interface.
UserInfo ui = new UserInfoPrompted();
session.setUserInfo(ui);
session.connect();
if (command == null) {
command = JOptionPane.showInputDialog("Enter command", "set|grep SSH");
}
Channel channel = session.openChannel("exec");
if (useSudo && sudoPasswd != null) {
((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
} else if (useSudo) {
((ChannelExec) channel).setCommand("sudo -p '' " + command);
} else {
((ChannelExec) channel).setCommand(command);
}
// if (useSudo) {
// ((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
// } else {
// ((ChannelExec) channel).setCommand(command);
// }
// ??? NOT SURE WHY THIS IS HERE
channel.setInputStream(null);
InputStream in = channel.getInputStream();
// prep the out channel so we can give a password if it is needed
OutputStream out = null;
if (useSudo && sudoPasswd != null) {
out = channel.getOutputStream();
}
((ChannelExec) channel).setErrStream(System.err);
// WESTY ADDED THIS *****
if (useSudo) {
// fixes "you must have a tty to sudo" problem
((ChannelExec) channel).setPty(true);
}
channel.connect();
// suppply the password for sudo
if (out != null) {
out.write((sudoPasswd + "\n").getBytes());
out.flush();
}
byte[] tmp = new byte[MAXCOMMANDBYTES];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, MAXCOMMANDBYTES);
if (i < 0) {
break;
}
if (!verbose) {
System.out.print("o");
} else {
System.out.print(new String(tmp, 0, i));
}
}
if (channel.isClosed()) {
GNSConfig.getLogger().log(Level.FINE, "exit status: {0}", channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
} catch (JSchException | IOException e) {
e.printStackTrace();
GNSConfig.getLogger().severe(e.toString());
}
}
use of com.jcraft.jsch.ChannelExec in project voltdb by VoltDB.
the class SSHTools method ScpTo.
// The Jsch method for SCP to.
// This code is direcly copied from the Jsch SCP sample program.
public boolean ScpTo(String local_file, String user, String key, String host, String remote_file) {
FileInputStream fis = null;
try {
boolean ptimestamp = true;
String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + remote_file;
cmdLog.debug("CMD: '" + command + "'");
JSch jsch = new JSch();
// Set the private key
if (null != key)
jsch.addIdentity(key);
Session session = jsch.getSession(user, host, 22);
// To avoid the UnknownHostKey issue
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// timeout after 5 seconds
session.connect(5000);
// exec 'scp -t rfile' remotely
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// get I/O streams for remote scp
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();
if (checkAck(in) != 0) {
return false;
}
File _lfile = new File(local_file);
if (ptimestamp) {
command = "T " + (_lfile.lastModified() / 1000) + " 0";
// The access time should be sent here,
// but it is not accessible with JavaAPI ;-<
command += (" " + (_lfile.lastModified() / 1000) + " 0\n");
out.write(command.getBytes());
out.flush();
if (checkAck(in) != 0) {
return false;
}
}
// send "C0644 filesize filename", where filename should not include '/'
long filesize = _lfile.length();
command = "C0644 " + filesize + " ";
if (local_file.lastIndexOf('/') > 0) {
command += local_file.substring(local_file.lastIndexOf('/') + 1);
} else {
command += local_file;
}
command += "\n";
out.write(command.getBytes());
out.flush();
if (checkAck(in) != 0) {
return false;
}
// send a content of lfile
fis = new FileInputStream(local_file);
byte[] buf = new byte[1024];
while (true) {
int len = fis.read(buf, 0, buf.length);
if (len <= 0)
break;
//out.flush();
out.write(buf, 0, len);
}
fis.close();
fis = null;
// send '\0'
buf[0] = 0;
out.write(buf, 0, 1);
out.flush();
if (checkAck(in) != 0) {
return false;
}
out.close();
channel.disconnect();
session.disconnect();
} catch (Exception e) {
System.out.println(e);
try {
if (fis != null)
fis.close();
} catch (Exception ee) {
}
return false;
}
return true;
}
use of com.jcraft.jsch.ChannelExec 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;
}
Aggregations