상세 컨텐츠

본문 제목

java SFTP key Example (인증키 테스트)

프로그램 언어/Java

by husks 2018. 12. 4. 15:09

본문

반응형


java로 SFTP 에 접속하는 소스 입니다.


기존 인터넷에 있는 소스를 보니 key로 인증받는 형식은 없어서 추가해 보았습니다.


사용은 SFTPUtil util = new SFTPUtil(); 이렇게 선언해서 사용하면 됩니다. ㅋㅋ


해당 SFTP 접속을 위해 라이브러리가 필요 합니다. (아래 클릭해서 받으세요.)


jsch-0.1.54.jar



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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package com.test.util;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
 
public class SFTPUtil {
 
    private Session session = null;
 
    private Channel channel = null;
 
    private ChannelSftp channelSftp = null;
 
    /**
     * 서버와 연결에 필요한 값들을 가져와 초기화 시킴
     *
     * @param host
     *            서버 주소
     * @param userName
     *            접속에 사용될 아이디
     * @param password
     *            비밀번호
     * @param port
     *            포트번호
     * @param privateKey
     *            키
     */
    public void init(String host, String userName, String password, int port, String privateKey) {
 
        JSch jSch = new JSch();
        try {
            if(privateKey!=null) {//키가 존재한다면
                jSch.addIdentity(privateKey);
            }
 
            session = jSch.getSession(userName, host, port);
 
            if(privateKey==null) {//키가 없다면
                session.setPassword(password);
            }
 
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking""no");
            session.setConfig(config);
            session.connect();
 
            channel = session.openChannel("sftp");
            channel.connect();
        } catch (JSchException e) {
            e.printStackTrace();
        }
 
        channelSftp = (ChannelSftp) channel;
 
    }
 
    /**
     * 하나의 폴더를 생성한다.
     *
     * @param dir
     *            이동할 주소
     * @param mkdirName
     *            생상할 폴더명
     */
    public void mkdir(String dir, String mkdirName) {
 
        try {
            channelSftp.cd(dir);
            channelSftp.mkdir(mkdirName);
        } catch (SftpException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 하나의 파일을 업로드 한다.
     *
     * @param dir
     *            저장시킬 주소(서버)
     * @param file
     *            저장할 파일
     */
    public void upload(String dir, File file) {
 
        FileInputStream in = null;
        try {
            in = new FileInputStream(file);
            channelSftp.cd(dir);
            channelSftp.put(in, file.getName());
        } catch (SftpException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 하나의 파일을 다운로드 한다.
     *
     * @param dir
     *            저장할 경로(서버)
     * @param downloadFileName
     *            다운로드할 파일
     * @param path
     *            저장될 공간
     */
    public void download(String dir, String downloadFileName, String path) {
        InputStream in = null;
        FileOutputStream out = null;
        try {
            channelSftp.cd(dir);
            in = channelSftp.get(downloadFileName);
        } catch (SftpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        try {
            out = new FileOutputStream(new File(path));
            int i;
 
            while ((i = in.read()) != -1) {
                out.write(i);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
    }
 
    /**
     * 서버와의 연결을 끊는다.
     */
    public void disconnection() {
        channelSftp.quit();
        session.disconnect();
 
    }
 
}
 




참조: http://haneulnoon.tistory.com/55

반응형

관련글 더보기

댓글 영역