본문으로 바로가기
반응형

자바에서 원격 서버에 명령어를 실행하거나 ftp로 파일을 주고받기 위해서 apach-commons에 있는 ftp/telnet 라이브러리를 사용한다. 하지만, sftp/ssh는 구현할 수가 없기 때문에 보안에 취약하다.

오픈소스인 jsch라이브러리는 java에서 sftp/ssh를 사용해 원격 서버에 접속할 수 있는 유용한 api를 제공한다.


maven spring boot 환경에서 우분투 리눅스 서버에 ssh 명령어를 날려 실행하는 것으로 간단한 테스트를 해 보았다.


JCraft 공식 사이트에서 zip, jar 파일의 라이브러리를 직접 받을 수 있다.

여기서는 maven dependency에 설정해서 jsch를 사용했다.


maven dependency 설정


1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>
cs



java class 코드 작성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        String username = "root";
        String host = "192.168.56.1";
        int port = 22;
        String password = "root";
        
        System.out.println("==> Connecting to" + host);
        Session session = null;
        Channel channel = null;
     
        // 2. 세션 객체를 생성한다 (사용자 이름, 접속할 호스트, 포트를 인자로 준다.)
        try {
            // 1. JSch 객체를 생성한다.
            JSch jsch = new JSch();
            session = jsch.getSession(username, host, port);
         
            // 3. 패스워드를 설정한다.
            session.setPassword(password);
         
            // 4. 세션과 관련된 정보를 설정한다.
            java.util.Properties config = new java.util.Properties();
            // 4-1. 호스트 정보를 검사하지 않는다.
            config.put("StrictHostKeyChecking""no");
            session.setConfig(config);
         
            // 5. 접속한다.
            session.connect();
         
            // 6. sftp 채널을 연다.
            channel = session.openChannel("exec");
         
            // 8. 채널을 SSH용 채널 객체로 캐스팅한다
            ChannelExec channelExec = (ChannelExec) channel;
         
            System.out.println("==> Connected to" + host);
            
            channelExec.setCommand("touch /test/jschTest.txt");
            channelExec.connect();
            
            System.out.println("==> Connected to" + host);
      
        } catch (JSchException e) {
            e.printStackTrace();
        } finally {
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
cs


리눅스 서버에 ssh 채널을 열고, "touch /test/jschTest.txt" 명령어를 날렸다.

직접 해당 서버에서 파일이 생성되었는지 확인해보자.



코드 실행 후 해당 파일이 생성된 것을 확인할 수 있다.


반응형

 Other Contents