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.File;
748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.IOException;
848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.InputStream;
948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.InputStreamReader;
1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.Connection;
1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.Session;
1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.StreamGobbler;
1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class PublicKeyAuthentication
1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{
1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static void main(String[] args)
1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		String hostname = "127.0.0.1";
2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		String username = "joe";
2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		File keyfile = new File("~/.ssh/id_rsa"); // or "~/.ssh/id_dsa"
2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		String keyfilePass = "joespass"; // will be ignored if not needed
2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		try
2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		{
2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Create a connection instance */
2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			Connection conn = new Connection(hostname);
3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Now connect */
3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			conn.connect();
3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Authenticate */
3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			boolean isAuthenticated = conn.authenticateWithPublicKey(username, keyfile, keyfilePass);
3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			if (isAuthenticated == false)
4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood				throw new IOException("Authentication failed.");
4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Create a session */
4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			Session sess = conn.openSession();
4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			sess.execCommand("uname -a && date && uptime && who");
4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			InputStream stdout = new StreamGobbler(sess.getStdout());
4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			System.out.println("Here is some information about the remote host:");
5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			while (true)
5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{
5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood				String line = br.readLine();
5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood				if (line == null)
5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					break;
5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood				System.out.println(line);
6048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			}
6148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
6248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Close this session */
6348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
6448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			sess.close();
6548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
6648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			/* Close the connection */
6748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
6848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			conn.close();
6948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
7048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		}
7148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		catch (IOException e)
7248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		{
7348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			e.printStackTrace(System.err);
7448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			System.exit(2);
7548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		}
7648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
7748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood}
78