Search in sources :

Example 36 with Channel

use of com.jcraft.jsch.Channel in project pentaho-kettle by pentaho.

the class SFTPClient method login.

public void login(String password) throws KettleJobException {
    this.password = password;
    s.setPassword(this.getPassword());
    try {
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        // set compression property
        // zlib, none
        String compress = getCompression();
        if (compress != null) {
            config.put(COMPRESSION_S2C, compress);
            config.put(COMPRESSION_C2S, compress);
        }
        s.setConfig(config);
        s.connect();
        Channel channel = s.openChannel("sftp");
        channel.connect();
        c = (ChannelSftp) channel;
    } catch (JSchException e) {
        throw new KettleJobException(e);
    }
}
Also used : JSchException(com.jcraft.jsch.JSchException) Channel(com.jcraft.jsch.Channel) KettleJobException(org.pentaho.di.core.exception.KettleJobException)

Example 37 with Channel

use of com.jcraft.jsch.Channel 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) {
        }
    }
}
Also used : JSchException(com.jcraft.jsch.JSchException) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Channel(com.jcraft.jsch.Channel) OutputStream(java.io.OutputStream) UserInfo(com.jcraft.jsch.UserInfo) IOException(java.io.IOException) JSch(com.jcraft.jsch.JSch) FileInputStream(java.io.FileInputStream) ChannelExec(com.jcraft.jsch.ChannelExec) IOException(java.io.IOException) JSchException(com.jcraft.jsch.JSchException) File(java.io.File) Session(com.jcraft.jsch.Session)

Example 38 with Channel

use of com.jcraft.jsch.Channel 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());
    }
}
Also used : JSchException(com.jcraft.jsch.JSchException) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Channel(com.jcraft.jsch.Channel) OutputStream(java.io.OutputStream) UserInfo(com.jcraft.jsch.UserInfo) IOException(java.io.IOException) JSch(com.jcraft.jsch.JSch) ChannelExec(com.jcraft.jsch.ChannelExec) IOException(java.io.IOException) JSchException(com.jcraft.jsch.JSchException) Session(com.jcraft.jsch.Session)

Example 39 with Channel

use of com.jcraft.jsch.Channel 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);
    }
}
Also used : JSchException(com.jcraft.jsch.JSchException) JFileChooser(javax.swing.JFileChooser) UserInfoPrompted(edu.umass.cs.aws.networktools.UserInfoPrompted) HeadlessException(java.awt.HeadlessException) Channel(com.jcraft.jsch.Channel) UserInfo(com.jcraft.jsch.UserInfo) JSch(com.jcraft.jsch.JSch) Session(com.jcraft.jsch.Session)

Example 40 with Channel

use of com.jcraft.jsch.Channel 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;
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Channel(com.jcraft.jsch.Channel) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) JSch(com.jcraft.jsch.JSch) FileInputStream(java.io.FileInputStream) ChannelExec(com.jcraft.jsch.ChannelExec) IOException(java.io.IOException) File(java.io.File) Session(com.jcraft.jsch.Session)

Aggregations

Channel (com.jcraft.jsch.Channel)63 InputStream (java.io.InputStream)38 ChannelExec (com.jcraft.jsch.ChannelExec)33 IOException (java.io.IOException)33 JSch (com.jcraft.jsch.JSch)32 JSchException (com.jcraft.jsch.JSchException)30 Session (com.jcraft.jsch.Session)27 FileInputStream (java.io.FileInputStream)19 ChannelSftp (com.jcraft.jsch.ChannelSftp)18 OutputStream (java.io.OutputStream)17 BufferedReader (java.io.BufferedReader)15 File (java.io.File)13 InputStreamReader (java.io.InputStreamReader)13 Properties (java.util.Properties)13 SftpException (com.jcraft.jsch.SftpException)12 FileOutputStream (java.io.FileOutputStream)10 UserInfo (com.jcraft.jsch.UserInfo)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)5 GFacException (org.apache.airavata.gfac.core.GFacException)4 SSHApiException (org.apache.airavata.gfac.core.SSHApiException)3