728x90

OpenSSH

이 글을 쓰게된건 일단 회사에서 여유시간이 생기게 되면 공부하는 시간을 가져도 된다고 하셨었다.

그래서 이참에 사이드 프로젝트 하던것을 좀 ec2 서버에 올려놓으면서 RDS설정도 해야겠다 싶었다.

근데 키가 없으니까 또 접속하기가 매우 불편했다.

왜냐면, 웹으로 접속하는 법을 썼어야 했으니까.

키 파일이 없는데 언제 어디서나 접속하게끔 하고 싶었고

그렇게 적용하게된 OpenSSH이다.

설치

일단 시작은 다음과 같다.

sudo apt update
sudo apt-get install openssh-server

먼저 패키지 시스템을 업데이트 해주고, openssh-server를 설치해준다.

ssh를 설치하게 되면 자동으로 실행된다.

그리고 나서 현재 상태를 조회할 수 있다.

sudo systemctl status ssh
스크린샷 2021-11-11 오후 8 51 12

이렇게 상태를 보고 동작중인지 확인이 되었다.

만약에 동작중이 아니라면

sudo systemctl enable ssh
sudo systemctl stop ssh
sudo systemctl start ssh

sudo systemctl restart ssh

stop, start를 사용하던지

restart를 사용하던지 편한것을 사용하면 되겠다.

방화벽은 나는 ec2 서버의 ubuntu를 사용하였기 때문에

인바운드 규칙에서 22번을 열어주면 방화벽 설정은 따로 해줄 필요가 없었다.

그리고 이제

접속할 쪽에서 openssh-client를 받아준다.

윈도우는 여기서 다루지 않겠다. 다른곳 가면 잘 나온다.

나는 WSL2를 사용해서

sudo apt-get install openssh-client

를 해줘서 패키지를 다운받았다. 그리고 나서 접속하는 명령어는

기존 명령어부터 먼저 보자면,

ssh -i "private key.pem" username@ip_address

방식이었고 pem파일이 없으면 실행이 안됐다.

설정법

일단 설치는 다 진행했고 다시 ec2서버로 가서

vi /etc/ssh/sshd_config 파일을 열어준다.

여기서 openssh-server에 대한 설정을 해줄 수가 있는데

전부 주석으로 처음에 막혀있다.

스크린샷 2021-11-11 오후 8 58 52

이렇게 주석되어 있는 소스들을 풀어주었다.

포트하고 어느 주소만 허용할 것인지

나는 언제 어디서나 사용할 수 있게끔 ip를 다 열어주었다. 사내에서는 이렇게 하면 안될 것이다.

막혔던 부분

아니 나는 당연히 여기서 무조건 되겠지 하고 걍했다.

남들 하는것처럼 비밀번호 나오겠지 뭐

또는 아? 인증화면에서 yes 해서 known_hosts에 등록되겠지 했다.

ㅋㅋㅋㅋㅋㅋㅋㅋ 미친짓이었다.🔥

해결책

🤔 왜 안됐을까?

아니 비밀번호를 설정만 해주면 뭐하나

일단 비밀번호 설정을 모르는 사람들을 위해 명령어 한줄 치고 가겠다.

나는 default username인 ubuntu를 썼다. 그리고 ubuntu 계정으로 들어와있다.

스크린샷 2021-11-11 오후 9 08 45

그렇기때문에

뭐 모르는상태에서 변경해야 될 수도 있을때는 sudo를 붙이면 되고,

물론 root가 아닌 얘기다!!!

sudo passwd username 으로 비밀번호를 설정해주면 된다.

여기까진 당연한것이고...

아까 설정했던 부분인 vi /etc/ssh/sshd_config로 다시 가보자

아래로 내려보면서 찾아보면

스크린샷 2021-11-11 오후 9 13 13

PasswordAuthentication 설정이 있다.

비밀번호 인증 ? yes 를 해야 당연히 적용이되지 바보같은것..

그래서 이제는 이 변경 설정을 적용해줘야 하기 때문에

위에서 봤던 명령어로 다시 껐다가 켜주면 정상적으로 로그인이 된다!!!

스크린샷 2021-11-11 오후 9 14 57

이렇게 ssh 접속으로 비밀번호까지 쳐주게 되면?

스크린샷 2021-11-11 오후 9 17 14

잘 나오게 된다. 아주 편리하고 좋은 것 같다.

이제 여기에 여러가지 설정들을 할것이다❗️❗️❗️❗️❗️ 🔥🔥🔥🔥

728x90

'클라우드' 카테고리의 다른 글

Docker compose  (0) 2022.08.07
[Docker] 도커란  (0) 2022.08.05
728x90

도커 컴포즈

업무하면서 도커를 적용해야하는 프로젝트가 있다. 아직 풀리지 않은 이슈들도 있는데

그거는 다른 포스팅에서 진행하도록 하고,

우선 도커 컴포즈에 대해 포스팅을 진행한다.

짧은 회고

지금까지 나의 방식은

Dockerfile을 생성해주고, 그 후에

도커 명령어를 통해서 개별 이미지들을 run을 해주어서 빌드를 해줬었다.

근데 이걸 쉘스크립트로 짜도 정말 불편했다.

내가 Vue와 Springboot를 둘다 배포해주어야 하는 상황이었기 때문이다.

Vue 그러니까 npm관련 실행 명령어는 또 Nodejs 공식문서를 봐가면서 습득을 했고

Vue + SpringBoot를 둘다 배포하는데에 성공했다.

일단 흐뭇했음.. 😂

따로 빌드하면서 설정해줄 것은 없어서

VueJs Dockerfile

Dockerize Vue 에서 읽은 내용으로 빌드를 진행

FROM node:lts-alpine

RUN npm install -g http-server

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm install -g @vue/cli

RUN npm run build

EXPOSE 8080

CMD [ "http-server", "dist"]

Spring Boot Dockerfile

FROM openjdk:11-jdk

ARG JAR_FILE=build/libs/\*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]

그리고 docker-compose는 최 상위 루트에서 yml파일로 만들어주어 실행하도록 한다.

  • docker-compose
    • Vue Dockerfile
    • SpringBoot Dockerfile

이런식으로 진행되어 컴포즈 파일이 두가지를 다 빌드관리를 해주는 것이다.

docker-compose.yml

version: "3.8" # 버전 명시 도커 버전이 19.03.0+ 이면 3.8

services:
  vue:
    volumes:
      - 소스위치 :/app # 소스위치 : vue WORKDIR 과 매칭
    build:
      context: 배포하고자 하는 경로 # 빌드하는 위치
      dockerfile: 도커파일 경로 # 도커파일 명시
    ports:
      - "8080:8080" # 포트 포워딩

  spring:
    build:
      context: 배포하고자 하는 경로
      dockerfile: 도커 파일 경로
    ports:
      - "8081:8081" # 포트 포워딩

이렇게 배포에 성공하였다.

요즘 자바 API설계보다 서버쪽 관리에 업무가 더 치중되어있는것 같다.

도움이 아주 많이 되는것 같다.

네트워크 지식도 점차 쌓여가는 것이 흡족하다.

728x90

'클라우드' 카테고리의 다른 글

OpenSSH  (0) 2022.08.09
[Docker] 도커란  (0) 2022.08.05
728x90

Docker란?

  • 컨테이너 기술을 지원하는 다양한 프로젝트중 하나
  • 컨테이너 기술의 사실상 표준
  • 다양한 운영체제에서 사용이 가능하다.(Linux, Mac OS, Windows)
  • 애플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화
  • Linux의 NameSpace와 cgroups 커널 기능을 사용하여 가상화

도커는 다양한 클라우드 서비스 모델과 같이 사용가능

  • 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
  • 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경

컨테이너가 해결한다!

  • 동일 시스템에서 실행하는 소프트웨어의 컴포넌트가 충돌하거나 다양한 종속성을 갖고 있음
  • 컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리하는 기술
  • 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행이 가능
  • 프로세스의 문제가 발생할 경우 컨테이너 전체를 조정해야 하기 때문에 컨테이너에 하나의 프로세스를 실행하도록 하는것이 좋다.

컨테이너, 서비스, 서버 가 많아질수록 비용이 절감되는 효과를 볼 수 있다❗

컨테이너를 격리하는 기술

리눅스 네임스페이스 : 각 프로세스가 파일 시스템 마운트, 네트워크, 유저, 호스트네임 등에 대해 시스템에 독립뷰 제공

리눅스 컨트롤 그룹 : 프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역 등)을 제한

도커의 한계

서비스가 커지면 커질수록 관리해야 하는 컨테이너의 양이 급격히 증가
도커를 사용하여 관리를 한다고 하더라도 쉽지 않은 형태
배포 및 컨테이너 batch전략
scale-in, scale-out이 어려움

Docker는 OS의 자원을 이용하기 때문에 기본적으로 Root 사용자에서 명령어를 사용해야 한다.
Docker Docs 바로가기

설치

sudo -i # root 접속
# 비밀번호 있으면 입력 없으면 그대로
# 명령어 치는 곳 $에서 # 으로 변경 확인
apt install docker.io # 도커 설치

search(image 검색)

docker search !@%!@

  • Docker 허브로부터 사용가능한 이미지를 찾는 명령어
  • Docker는 Docker Hub를 통해 GitHub처럼 사용자들간의 이미지 공유를 할 수 있는 환경이 구축되어 있다.
  • 공식이미지는 / 앞에 사용자 이름이 붙지 않는것이다.

Pull(image 다운로드)

docker pull tomcat:latest
Docker 허브로부터 이미지 다운로드

images(image 목록 보기)

# docker images
현재 PC에 다운 받아져있는 image들을 출력하는 명령어

run

컨테이너 생성과 동시에 컨테이너로 접속하는 명령어

# docker run "REPOSITORY"
(docker run <옵션><이미지이름 or 이미지ID><실행할 파일>)

  • 단순히 image안의 파일을 실행할 목적으로 생성된 것이기 때문에 메인으로 실행되는 파일이 종료되면 컨테이너도 같이 종료된다. 따라서 계속해서 컨테이너를 유지하고 싶다면 -d 옵션을 이용해야 한다.

  • 옵션

    • -i : interactive
      • 사용자가 입출력을 할 수 있는 상태로 한다.
    • -t : 가상 터미널 환경을 에뮬레이션 하겠다는 설정
    • -d : 컨테이너를 일반 프로세스가 아닌 데몬프로세스 형태로 실행하여 프로세스가 끝나도 유지되도록 한다.

create

컨테이너 생성 명령어
# docker create <옵션> <포트번호> <이름> <이미지명>
docker create -d -p 80:80 --name nx nginx
이런식으로 명령어 사용이 가능하다
컨테이너 계층을 생성하고 명령을 실행하게끔만 만드는 단계이다.

옵션

  • -p : 컨테이너의 포트를 호스트에 게시함
  • --name : 컨테이너에 이름 할당

start

docker start [OPTIONS] CONTAINER [CONTAINER...]
create에서 할당한 이름값으로 시작할 수 있고 containerId로도 실행이 가능하다.

stop

docker stop id or container
실행중인 container를 중지시킨다.
-t 옵션으로 일정시간 지난후에 중지 시킬수도 있다.

ps

컨테이너 목록보기 명령어
docker ps로 볼수있다.
기본값은 실행되고있는 컨테이너만 표시한다.
그래서 중지된 컨테이너도 보려면 docker ps -a 를 사용하면 된다.

옵션

  • --all, -a
    • 모든 컨테이너 표시(기본값은 실행만 표시)
  • --quiet, -q
    • 컨테이너 ID만 표시

remove

제거 명령은 container를 중지 시킨 후에 가능하다

docker rm containerId or name

중지시킨후에 container 제거 명령을 할 수있다.

rmi는 이미지를 지우는 것으로 설치했던것을 삭제하는 명령이다.

docker rmi nginx 이런식으로 받았던 이미지 이름을 rmi 뒤에 넣어준다.

컨테이너 내부 shell 실행

sudo docker exec -it tc /bin/bash

컨테이너 로그 확인

sudo docker logs tc # stdout, stderr

728x90

'클라우드' 카테고리의 다른 글

OpenSSH  (0) 2022.08.09
Docker compose  (0) 2022.08.07

+ Recent posts