轉自:http://blog.sina.com.cn/s/blog_407956230100e7qt.htmlhtml
使用的第三方包下載:ganymed-ssh2-build210.jarjava
代碼以下:ssh
package com.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; public class ChangeEmailPassword { private String username = ""; private String oldpassword = ""; private Connection conn = null; private boolean hasError = false; private String ErrorMessage = ""; private boolean isSuccessfully = false; private String SystemMessage = ""; public static final String HOST = "192.168.25.111"; //server ip public boolean isSuccessfully(){ return isSuccessfully; } public boolean isHasError(){ return hasError; } public String getErrorMessage(){ return ErrorMessage; } public void setErrorMessage(String msg){ hasError = true; this.ErrorMessage = msg; } public ChangeEmailPassword(String username,String oldpassword) { this.username = username; this.oldpassword = oldpassword; try{ conn = new Connection(HOST,22); conn.connect(); boolean isAuthenticated = conn.authenticateWithPassword(username, oldpassword); if (isAuthenticated == false) { setErrorMessage("Authentication failed."); conn=null; } }catch(Exception e){ conn.close(); conn = null; System.out.println(e); } } public void setNewPassword(String newpassword) { if(hasError){ return; } if (conn==null){ return; } try{ Session sess = conn.openSession(); sess.execCommand("passwd"); InputStream so = sess.getStdout(); InputStream err = sess.getStderr(); OutputStream out = sess.getStdin(); byte[] buffer = new byte[500];//其實沒有必要這麼大.130就差很少了.怕萬一有什麼提示. int length = 0; length = err.read(buffer); if (length > 0) { System.out.println("#1:"+ new String(buffer, 0, length)); //(current) UNIX password: } String coldpassword = newpassword+"\n"; out.write(coldpassword.getBytes()); length = err.read(buffer); if (length > 0) { System.out.println("#2:"+ new String(buffer, 0, length)); //(current) UNIX password: } String cnewpass = newpassword +"\n"; out.write(cnewpass.getBytes()); length = err.read(buffer); if (length > 0) { String rs = new String(buffer, 0, length); System.out.println("#3:"+rs); if(rs.indexOf("BAD")>-1 || rs.indexOf("Sorry")>-1){ sess.close(); conn.close(); setErrorMessage(rs); return; } } out.write(cnewpass.getBytes()); length = so.read(buffer); if (length > 0) { String rs = new String(buffer, 0, length); if(rs.indexOf("successfully")>-1){ this.isSuccessfully = true; this.SystemMessage = rs; } } sess.close(); conn.close(); } catch (IOException e) { e.printStackTrace(System.err); } } public static void main(String[] args) { ChangeEmailPassword cep = new ChangeEmailPassword("root", "password"); if(cep.isHasError()){ System.out.println(cep.getErrorMessage()); cep = null; return; } cep.setNewPassword("newpassword"); if(cep.isHasError()){ System.out.println(cep.getErrorMessage()); cep = null; return; } if(cep.isSuccessfully){ System.out.println(cep.getSystemMessage()); } } public String getSystemMessage() { return SystemMessage; } }