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