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