반응형

 scp rexec ssh (ssh원격실행)


 1.   1번 서버에 접속 !

 2.   ~ $]   ssh   아이디@111.11.11.1  "ls  -al"


 결과   :  111.11.11.1 서버의 아이디의 기본디렉토리 위치에서 "ls -al" 의 결과를 현재1번섭에서 볼 수 있다


 같은 방법으로 파일도 가져올 수 있다..


 ~$]  scp  아이디@111.11.11.1:/디렉토리1/디렉토리2/exam.txt    .  << 현재위치에 111.11.11.1 서버의 exam.txt  파일을 가져옴(원본은 남아있음)


######  ssh 비밀번호 없이 서버이동 하기  (2012-04-26 업데잇;)


비밀번호없이 리눅스에서 한서버에서 다른서버로 이동하는 방법입니다.


   a번서버 ----->  2번 서버


a번 서버에서 입력 : 

~]   ssh-keygen -t rsa      <엔터>

      Enter file in which to save the key (/home/user1/.ssh/id_rsa): <엔터>

      Enter passphrase (empty for no passphrase):                         <엔터>

      Enter same passphrase again:                                              <엔터>


위의 과정을 하고나면   .ssh/   아래에   /id_rsa.pub    <--    이녀석이 생성되어 있음


생성된  id_rsa.pub 파일을 암호없이 이동할  2번서버의   .ssh/폴더에 넣고   파일명을  authorized_keys 로 수정


끝 ㅡㅡ;


이제 a  서버에서  2번 서버로 이동할때 비밀번호따윈 묻지 않는다.. 생성되었던 파일을 다른 서버에다가도 똑같이 적용하면 여러서버에서도 


비밀번호를 입력하지 않아도 된다.

반응형
반응형

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