How to set password for ssh connection in java

I want to connect my unix server using java code. first it will connect to my server. inside that it will connect to my server name. but at this time it will ask for confirmation (yes / no) and a password that I do not know how to do? Here is my code I made. Please help me with this

public static void main (String args[]) {
    String user = "user";
    String password = "password";
    String host = "hostName";
    int port=22;

    //String remoteFile="/home/john/test.txt";
    //String yes="yes";

    try {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        System.out.println("Establishing Connection...");
        session.connect();
        Channel channel = session.openChannel("exec");

        // After this it'll ask for confirmation and password
        ((ChannelExec)channel).setCommand("ssh myServerName");
        channel.connect();

        InputStream output = channel.getInputStream();

        System.out.println("aafter stream");
        int readByte = output.read();
        StringBuilder outputBuffer = new StringBuilder();
        while (readByte != 0xffffffff) {
            //System.out.println("read byte" + readByte);
            outputBuffer.append((char)readByte);
            readByte = output.read();
        }
        System.out.println(outputBuffer.toString());
        channel.disconnect();
    } catch (Exception e){
        System.err.print("error message" + e);
    }
}
+4
source share
2 answers

You need to get a secure OutputStream from JSch and insert a password into it.

Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
        channel.setInputStream(null);
        OutputStream out = channel.getOutputStream();
        ((ChannelExec) channel).setErrStream(System.err);
        InputStream in = channel.getInputStream();
        ((ChannelExec) channel).setPty(true);
        channel.connect();
        out.write((password + "\n").getBytes());
        out.flush();

The full source code is here: http://codeflex.co/java-run-sudo-command-on-remote-linux-host/

+2
source
    try {
    session = jsch.getSession(user, host, port);
}
catch (JSchException e) {
    throw new TransferException("Failed to open session - " + params, e);
}

session.setPassword(password);

//  Create UserInfo instance in order to support SFTP connection to any machine 
//  without a key username and password will be given via UserInfo interface.
UserInfo userInfo = new SftpUserInfo();
session.setUserInfo(userInfo);

try {
    session.connect(connectTimeout);
}
catch (JSchException e) {
    throw new TransferException("Failed to connect to session - " + params, e);
}

boolean isSessionConnected = session.isConnected();

Set the password programmatically as shown above.

0
source

All Articles