/** * Copyright 2003-2016 SSHTOOLS Limited. All Rights Reserved. * * For product documentation visit https://www.sshtools.com/ * * This file is part of J2SSH Maverick. * * J2SSH Maverick is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * J2SSH Maverick is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with J2SSH Maverick. If not, see <http://www.gnu.org/licenses/>. */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import com.sshtools.logging.LoggerFactory; import com.sshtools.logging.LoggerLevel; import com.sshtools.logging.SimpleLogger; import com.sshtools.net.SocketTransport; import com.sshtools.publickey.ConsoleKnownHostsKeyVerification; import com.sshtools.ssh.PasswordAuthentication; import com.sshtools.ssh.PseudoTerminalModes; import com.sshtools.ssh.SshAuthentication; import com.sshtools.ssh.SshClient; import com.sshtools.ssh.SshConnector; import com.sshtools.ssh.SshSession; import com.sshtools.ssh2.Ssh2Context; /** * This example demonstrates password authentication. * * @author Lee David Painter */ public class PasswordConnect { public static void main(String[] args) { LoggerFactory.setInstance(new SimpleLogger(LoggerLevel.DEBUG)); final BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); try { System.out.print("Hostname: "); String hostname; hostname = reader.readLine(); int idx = hostname.indexOf(':'); int port = 22; if (idx > -1) { port = Integer.parseInt(hostname.substring(idx + 1)); hostname = hostname.substring(0, idx); } System.out.print("Username [Enter for " + System.getProperty("user.name") + "]: "); String username; username = reader.readLine(); if (username == null || username.trim().equals("")) username = System.getProperty("user.name"); /** * Create an SshConnector instance */ SshConnector con = SshConnector.createInstance(); con.getContext().setHostKeyVerification(new ConsoleKnownHostsKeyVerification()); /** * Connect to the host */ System.out.println("Connecting to " + hostname); SocketTransport transport = new SocketTransport(hostname, port); System.out.println("Creating SSH client"); final SshClient ssh = con.connect(transport, username, true); /** * Authenticate the user using password authentication */ PasswordAuthentication pwd = new PasswordAuthentication(); do { System.out.print("Password: "); pwd.setPassword(reader.readLine()); } while (ssh.authenticate(pwd) != SshAuthentication.COMPLETE && ssh.isConnected()); /** * Start a session and do basic IO */ if (ssh.isAuthenticated()) { // Some old SSH2 servers kill the connection after the first // session has closed and there are no other sessions started; // so to avoid this we create the first session and dont ever // use it final SshSession session = ssh.openSessionChannel(); // Use the newly added PseudoTerminalModes class to // turn off echo on the remote shell PseudoTerminalModes pty = new PseudoTerminalModes(ssh); pty.setTerminalMode(PseudoTerminalModes.ECHO, false); session.requestPseudoTerminal("vt100", 80, 24, 0, 0, pty); session.startShell(); Thread t = new Thread() { public void run() { try { int read; while ((read = session.getInputStream().read()) > -1) { System.out.write(read); System.out.flush(); } } catch (IOException ex) { ex.printStackTrace(); } } }; t.start(); int read; // byte[] buf = new byte[4096]; while ((read = System.in.read()) > -1) { session.getOutputStream().write(read); } session.close(); } ssh.disconnect(); } catch (Throwable t) { t.printStackTrace(); } } }