148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/* 248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Copyright (c) 2006-2011 Christian Plattner. All rights reserved. 348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Please refer to the LICENSE.txt for licensing details. 448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */ 548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.BufferedReader; 648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.IOException; 748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.InputStream; 848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.InputStreamReader; 948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.Connection; 1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.HTTPProxyData; 1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.Session; 1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.StreamGobbler; 1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class BasicWithHTTPProxy 1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{ 1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood public static void main(String[] args) 1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String hostname = "my-ssh-server"; 2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String username = "joe"; 2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String password = "joespass"; 2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String proxyHost = "192.168.1.1"; 2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood int proxyPort = 3128; // default port used by squid 2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood try 2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Create a connection instance */ 2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood Connection conn = new Connection(hostname); 3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* We want to connect through a HTTP proxy */ 3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood conn.setProxyData(new HTTPProxyData(proxyHost, proxyPort)); 3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood // if the proxy requires basic authentication: 3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood // conn.setProxyData(new HTTPProxyData(proxyHost, proxyPort, "username", "secret")); 3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Now connect (through the proxy) */ 4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood conn.connect(); 4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Authenticate. 4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * If you get an IOException saying something like 4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * "Authentication method password not supported by the server at this stage." 4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * then please check the FAQ. 4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */ 4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood boolean isAuthenticated = conn.authenticateWithPassword(username, password); 5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood if (isAuthenticated == false) 5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood throw new IOException("Authentication failed."); 5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Create a session */ 5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood Session sess = conn.openSession(); 5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood sess.execCommand("uname -a && date && uptime && who"); 5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 6048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood System.out.println("Here is some information about the remote host:"); 6148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 6248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* 6348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * This basic example does not handle stderr, which is sometimes dangerous 6448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * (please read the FAQ). 6548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */ 6648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 6748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood InputStream stdout = new StreamGobbler(sess.getStdout()); 6848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 6948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 7048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 7148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood while (true) 7248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 7348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String line = br.readLine(); 7448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood if (line == null) 7548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood break; 7648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood System.out.println(line); 7748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 7848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 7948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Show exit status, if available (otherwise "null") */ 8048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 8148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood System.out.println("ExitCode: " + sess.getExitStatus()); 8248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 8348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Close this session */ 8448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 8548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood sess.close(); 8648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 8748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood /* Close the connection */ 8848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 8948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood conn.close(); 9048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 9148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 9248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood catch (IOException e) 9348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 9448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood e.printStackTrace(System.err); 9548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood System.exit(2); 9648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 9748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 9848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood} 99