오늘 SpringCloud 로 MSA 비슷하게 구현도 해보고 여러가지 해봤는데
그럼에도 오늘 정말 인상 깊었던 것은 내 개인 서버 SFTP 연결하는 과정이 재밌었다. 일단 까먹기전에 어제 했던 거를 해보려고 한다
FROM ubuntu:20.04
RUN apt-get update \
&& apt-get install -y openssh-server \
&& mkdir /var/run/sshd \
&& echo 'root:9315' | chpasswd \
&& sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
&& sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config \
&& sed -i 's/#X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config \
&& echo "AllowTcpForwarding yes" >> /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
우분투 20.04 이미지를 사용한다
SFTP 는SSH
설정과 함께 설정이 가능하다
Root 비밀번호 설정을9315
로 하고
Root 계정으로 로그인 가능하게 설정을 한다.
docker build -t sftp-server .
t 태그를 사용하여 sftp-server 라는 이름으로 이미지를 빌드
지금 다시 해보니 이런 식으로 빌드가 되는 것을 볼 수 있다.
docker run -d -p 2222:22 --name sftp-container sftp-server
17f1235137656ada9a5768d9d7be2558149512af3903f7ee70f03e150f6e8d4c
port 번호를 2222 로 설정하여 container 를 생성
sftp -P 2222 root@localhost
The authenticity of host '[localhost]:2222 ([::1]:2222)' can't be established.
ED25519 key fingerprint is SHA256:f23IcbjL18VW9sj/Q52SSpwm9tPweBsMqSKAXkq7FQE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ED25519) to the list of known hosts.
root@localhost's password:
Permission denied, please try again.
root@localhost's password:
Connected to localhost.
sftp>
sftp 프로토콜을 선언하여 docker container 에서 설정한 2222 로 root 계정을 사용해서 접근하여 접속 한 것을 볼 수 있다
자바는 jar 파일을 받기 귀찮기도 하고 추후에 SFTP 서버를 연결해서
이미지 서버를 구성하기 위해서 SpringBoot 를 사용할 예정이다
사실상 SpringBoot 를 사용한다고 해도 자바처럼 사용할 거지만..
Java version
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.2'
id 'io.spring.dependency-management' version '1.1.4'
}
dependency
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// https://mvnrepository.com/artifact/com.jcraft/jsch
implementation 'com.jcraft:jsch:0.1.55'
}
- SpringBoot WEB
- lombok
- jcraft
(여기서 SFTP 를 연결하기 위해서 jcraft 를 사용했다.)
메이븐레파지토리
package com.file.sftpuse;
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;
public class Main {
private static final String SESSION_CONFIG_STRICT_HOST_KEY_CHECKING = "StrictHostKeyChecking";
public static void main(String[] args) throws JSchException {
String remote = "127.0.0.1";
int ssh_port = 2222;
String user = "root";
String private_key = "9315";
JSch jSch = new JSch();
Session session = jSch.getSession(user, remote, ssh_port);
session.setConfig(SESSION_CONFIG_STRICT_HOST_KEY_CHECKING,"no");
session.setPassword(private_key);
session.connect(15000);
Channel channel = session.openChannel("sftp");
channel.connect(15000);
ChannelSftp sftp = (ChannelSftp) channel;
try {
sftp.cd("/home/");
sftp.put( "/Users/maxxing/Documents/github-repo/PLAY_GROUND/DOCKER/TOTALMD.md","black.md");
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
System.out.println(e.getCause());
}
sftp.disconnect();
channel.disconnect();
session.disconnect();
}
}
좀 멍청하게 작성하긴 했는데 이만한 예시도 없는거 같아서
작성했다 그래도 들어갈건 다 들어가있다.
기능을 설명해보면
SFTP 를 사용하여 우분투 컨테이너 안의home
디렉토리에
/Users/maxxing/Documents/github-repo/PLAY_GROUND/DOCKER/TOTALMD.md
위치의 파일을
black.md
이라는 이름으로 저장한 거다.
black.md 라는 이름으로 마크다운 파일이 들어간 것을 확인할 수 있다.
TOTALMD.md 와 같지만 이름만 다른 black.md 파일을 확인할 수 있다.