반응형

import java.io.BufferedReader;


import java.io.InputStream;


import java.io.InputStreamReader;


import java.util.ArrayList;


import java.util.List;


import java.util.StringTokenizer;



import ch.ethz.ssh2.Connection;


import ch.ethz.ssh2.Session;


import ch.ethz.ssh2.StreamGobbler;




import com.javasrc.jolt.component.linux.model.FileSystem;




/**


 * SSHAgent는 Java 응용 프로그램이 SSH를 통해 원격 서버에서 명령을 실행할 수 있도록


 * 한다.


 * @author madnix


 *


 */


public class SSHAgent {


    


    /**


     * 서버에 연결하는 호스트 이름 (or IP 주소)


     */


    private String hostname;


    


    /**


     * 해당 서버에 있는 사용자 이름


     */


    private String username;


    


    /**


     * 해당 서버에 있는 사용자의 암호


     */


    private String password;


    


    /**


     * 서버 연결 커넥션 객체


     */


    private Connection connection;


    


    /**


     * SSHAgent 객체 생성


     * 


     * @param hostname


     * @param username


     * @param password


     */


    public SSHAgent( String hostname, String username, String password )


    {


        this.hostname = hostname;


        this.username = username;


        this.password = password;


    }


    


    /**


     * 서버에 연결


     * 


     * @return        연결 성공 시 true, 그 외에는 false


     */


    public boolean connect() throws SSHException


    {


        try


        {


            // 서버 연결 객체 생성


            connection = new Connection( hostname );


            connection.connect();


            


            // 인증


            boolean result = connection.authenticateWithPassword( username,    


                                   password );


            System.out.println( "연결 성공 여부 : " + result );


            return result;


        }


        catch( Exception e )


        {


            throw new SSHException( "호스트에 연결하는 동안 예외가 발생하였습니다 : 


                                  " + hostname + ", Exception=" + e.getMessage(), e ); 


        }


    }


    


    /**


     * 지정된 명령을 실행하고 서버에서 응답을 반환한다.


     *  


     * @param command        command 실행


     * @return               서버에서 반환하는 응답 (or null)


     */


    public String executeCommand( String command ) throws SSHException 


    {


        try


        {


            // 세션 생성


            Session session = connection.openSession();


            


            // command 실행


            session.execCommand( command );


            


            // 결과 확인


            StringBuilder sb = new StringBuilder();


            InputStream stdout = new StreamGobbler( session.getStdout() );


            BufferedReader br = new BufferedReader(new 


                                             InputStreamReader(stdout));


            String line = br.readLine();


            while( line != null )


            {


                sb.append( line + "\n" );


                line = br.readLine();


            }




            // DEBUG : exit 코드 덤프


            System.out.println( "ExitCode : " + session.getExitStatus() );




            // 세션 종료


            session.close();


            


            // 호출자에게 결과를 반환


            return sb.toString();


        }


        catch( Exception e )


        {


            throw new SSHException( "다음 명령을 실행하는 동안 예외가 발생하였습니다. 


                               : " + command + ". Exception = " + e.getMessage(), e );


        }


    }




    /**


     * 서버에서 로그 아웃


     * @throws SSHException


     */


    public void logout() throws SSHException


    {


        try


        {


            connection.close();


        }


        catch( Exception e )


        {


            throw new SSHException( "SSH 연결을 종료하는 동안 예외가 발생했습니다. : 


                                               " + e.getMessage(), e );


        }


    }


    


    /**


     * 기본 인증이 완료되면 true를 반환하고 그렇지 않을 경우 false


     * @return


     */


    public boolean isAuthenticationComplete()


    {


        return connection.isAuthenticationComplete();


    }


    


    public static void main( String[] args ) 


    {


        try


        {


            SSHAgent sshAgent = new SSHAgent( "192.168.2.3", "username", 


                                                               "mypassword" );


            if( sshAgent.connect() ) 


            {


                String diskInfo = sshAgent.executeCommand( "df -k" );


                System.out.println( "디스크 정보 : " + diskInfo );


                


                String processInfo = sshAgent.executeCommand( "top -b -n 1" );


                System.out.println( "프로세스 정보 : " + processInfo );


                


                // 로그아웃


                sshAgent.logout();


            }


        }


        catch( SSHException e )


        {


            e.printStackTrace();


        }


    }


}


출처: http://madnix.tistory.com/entry/Java에서-SSH를-통해-리눅스-서버에-명령을-전달하는-코드

반응형

+ Recent posts