반응형
Jsch를 이용해서 리눅스에 SFTP 전송하는 방법에 대해 이야기해보겠습니다.
우선 저의 로직은,
저는 회원가입을 하게 되면
리눅스에 아이디를 생성하면서 해당 폴더를 생성해줍니다.
그리고 암호를 지정하여 리눅스에 사용자가 별도의 공간을 사용할 수 있도록 설정해주는거죠!
여러 Jsch 라이브러리의 활용법들이 많지만
이 글의 특징은 여러 명령문을 사용하는 점이 키포인트라 말할 수 있습니다.
저처럼 해매시는 분들을 위한 포스팅이니 도움이 되셨으면 좋겠습니다~
Controller
1
2
3
4
5
6
7
8
9
|
List<String> commandList = new ArrayList<>();
commandList.add("useradd "+searchVO.getMe_id() + " -s /sbin/nologin -d /home/"+searchVO.getMe_id());
commandList.add("echo "+ oriPwd + " | passwd --stdin "+ searchVO.getMe_id());
for(int i = 0; i < commandList.size(); i++) {
JschImplement jsch = new JschImplement();
jsch.JschMethod(commandList.get(i));
}
|
cs |
동시에 여러 명령어를 실행시키려 시도를 해봤으나,
명령어를 하나만 실행하고 접속이 끊어졌습니다.
그래서 리스트에 명령어를 담아 반복문으로 실행하는 방법으로 구현하였습니다.
참고로 searchVO.getMe_id()에는 회원 아이디와,
oriPwd는 패스워드가 들어간 변수입니다.
JschMethod
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
|
package com.bsite.bioresource.member.web;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import egovframework.com.cmm.EgovProperties;
public class JschImplement {
public void JschMethod(String command){
String host = "host정보를 넣어줍니다.";
int port = "port정보를 넣어줍니다.";
String username = "사용자 생성 정보를 넣어줍니다.";
String password = "패스워드 정보를 넣어줍니다.";
Session session = null;
Channel channel = null;
// 세션 객체를 생성합니다. (사용자 이름, 접속할 호스트, 포트를 인자로 줍니다.)
try {
// JSch 객체를 생성합니다.
JSch jsch = new JSch();
session = jsch.getSession(username, host, port);
// 패스워드를 설정합니다.
session.setPassword(password);
// 세션과 관련된 정보를 설정합니다.
java.util.Properties config = new java.util.Properties();
// 호스트 정보를 검사하지 않습니다.
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// 접속합니다.
session.connect();
// sftp 채널을 엽니다.
channel = session.openChannel("exec");
// 채널을 SSH용 채널 객체로 캐스팅합니다
ChannelExec channelExec = (ChannelExec) channel;
//명령어를 넣습니다.
channelExec.setCommand(command);
//실행합니다.
channelExec.connect();
} catch (JSchException e) {
e.printStackTrace();
} finally {
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
}
}
|
cs |
그리고 host, port와 사용자 아이디, 패스워드 정보를 통해
- JSCH 객체를 생성하고,
- 패스워드를 설정하여 환결설정을 한다음,
- 접속을 하고,
- SFTP 채널을 열어
- SSH용 채널로 캐스팅하여
- 명령문을 넣고
- 실행해줍니다.
이러한 코드를 이용하여 응용하면 더욱 좋은 구현체가 나올 수 있을 것 같네요
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 다중 체크값 팝업창에서 AJAX로 저장방법 (0) | 2022.08.15 |
---|---|
[Java] ArrayList에서 Key값 활용하는 방법 (0) | 2022.07.21 |
[Java] 텍스트 내용을 엑셀로 전환 방법 (영상) (0) | 2022.05.31 |
[JAVA] VO객체의 변수와 변수의 값 출력 방법 (0) | 2022.05.20 |
[JAVA] 이미지 파일 GPS정보 추출 & 주소 출력 방법 (2) | 2022.04.05 |
댓글