use of com.jcraft.jsch.UserInfo in project camel by apache.
the class ScpServerTestSupport method setupKnownHosts.
protected void setupKnownHosts() {
knownHostsFile = SCP_ROOT_DIR + "/" + KNOWN_HOSTS;
if (!acceptLocalhostConnections) {
return;
}
// For security reasons (avoiding man in the middle attacks),
// camel-jsch will only connect to known hosts. For unit testing
// we use a known key, but since the port is dynamic, the
// known_hosts file will be generated by the following code and
// should contain a line like below (if
// "HashKnownHosts"=="yes" the hostname:port part will be
// hashed and look a bit more complicated).
//
// [localhost]:21000 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDd \
// fIWeSV4o68dRrKSzFd/Bk51E65UTmmSrmW0O1ohtzi6HzsDPjXgCtlTt3F \
// qTcfFfI92IlTr4JWqC9UK1QT1ZTeng0MkPQmv68hDANHbt5CpETZHjW5q4 \
// OOgWhVvj5IyOC2NZHtKlJBkdsMAa15ouOOJLzBvAvbqOR/yUROsEiQ==
JSch jsch = new JSch();
try {
LOG.debug("Using '{}' for known hosts.", knownHostsFile);
jsch.setKnownHosts(knownHostsFile);
Session s = jsch.getSession("admin", "localhost", getPort());
s.setConfig("StrictHostKeyChecking", "ask");
// TODO: by the current jsch (0.1.51) setting "HashKnownHosts" to "no" is a workaround
// to make the tests run green, see also http://sourceforge.net/p/jsch/bugs/63/
s.setConfig("HashKnownHosts", "no");
s.setUserInfo(new UserInfo() {
@Override
public String getPassphrase() {
return null;
}
@Override
public String getPassword() {
return "admin";
}
@Override
public boolean promptPassword(String message) {
return true;
}
@Override
public boolean promptPassphrase(String message) {
return false;
}
@Override
public boolean promptYesNo(String message) {
// accept host authenticity
return true;
}
@Override
public void showMessage(String message) {
}
});
// in the process of connecting, "[localhost]:<port>" is added to the knownHostsFile
s.connect();
s.disconnect();
} catch (JSchException e) {
LOG.info("Could not add [localhost] to known hosts", e);
}
}
use of com.jcraft.jsch.UserInfo in project GNS by MobilityFirst.
the class Sudo method main.
/**
*
* @param arg
*/
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
Session session = SSHClient.authenticateWithKey(jsch, null, null, null);
UserInfo ui = new UserInfoPrompted();
session.setUserInfo(ui);
session.connect();
String command = JOptionPane.showInputDialog("Enter command, execed with sudo", "printenv SUDO_USER");
String sudo_pass = null;
{
JTextField passwordField = new JPasswordField(8);
Object[] ob = { passwordField };
int result = JOptionPane.showConfirmDialog(null, ob, "Enter password for sudo", JOptionPane.OK_CANCEL_OPTION);
if (result != JOptionPane.OK_OPTION) {
System.exit(-1);
}
sudo_pass = passwordField.getText();
}
Channel channel = session.openChannel("exec");
// man sudo
// -S The -S (stdin) option causes sudo to read the password from the
// standard input instead of the terminal device.
// -p The -p (prompt) option allows you to override the default
// password prompt and use a custom one.
((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
((ChannelExec) channel).setPty(true);
channel.connect();
out.write((sudo_pass + "\n").getBytes());
out.flush();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
} catch (JSchException | HeadlessException | IOException e) {
System.out.println(e);
}
}
use of com.jcraft.jsch.UserInfo in project GNS by MobilityFirst.
the class UserAuthPubKey method main.
/**
*
* @param arg
*/
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Choose your privatekey(ex. ~/.ssh/id_dsa)");
chooser.setFileHidingEnabled(false);
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose " + chooser.getSelectedFile().getAbsolutePath() + ".");
// , "passphrase"
jsch.addIdentity(// , "passphrase"
chooser.getSelectedFile().getAbsolutePath());
}
String host = null;
if (arg.length > 0) {
host = arg[0];
} else {
host = JOptionPane.showInputDialog("Enter username@hostname", System.getProperty("user.name") + "@localhost");
}
String user = host.substring(0, host.indexOf('@'));
host = host.substring(host.indexOf('@') + 1);
Session session = jsch.getSession(user, host, 22);
// username and passphrase will be given via UserInfo interface.
UserInfo ui = new UserInfoPrompted();
session.setUserInfo(ui);
session.connect();
Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
} catch (HeadlessException | JSchException e) {
System.out.println(e);
}
}
use of com.jcraft.jsch.UserInfo 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.UserInfo 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());
}
}
Aggregations