개발일지/스파르타코딩클럽

도커 실무 (1) - Linux OS와 cmd로 인스턴스 접속하기(+권한 설정)

마이구미+ 2023. 5. 31. 17:14

<Linux OS>

- Linux OS란?

  • Git을 창시한 리눅스 토발즈가 1991년 Unix를 기반으로 개발한 OS
  • 서버용 OS로 많이 사용됨
  • Windows에 Windows 98, X, 7, 10 등이 있는 것처럼 Linux에는 Debian, Ubuntu, Redhat, CentOS 등 다양한 OS가 존재함

- Linux의 특징

  • 소스코드를 자유롭게 보고 수정할 수 있는 오픈 소스(리눅스 소스코드가 깃허브에 전체공개 되어 있어서 내 입맛대로 변경 가능)
  • 마우스 / 키보드를 사용해 조작하는 GUI(Graphical User Interfafe) 환경의 Windows, Mac과 달리 기본적으로 CLI(Command Line Interface) 환경에서 사용됨

리눅스 명령어

  • [명령어 -옵션] 구조로 이루어짐
  • 2개 이상의 옵션을 한 번에 사용할 수 있고 옵션의 순서는 무관함
ls	# 파일 목록을 보여주는 명령어
ls -l	# -l : 파일 목록을 더 자세히 보여주는 옵션
ls -a	# -a : 숨김 파일까지 보여주는 옵션
  • 일부 명령어는 source와 destination의 구조로 이루어져 있음
cp a.txt a_copy.txt		# a.txt를 a_copy.txt로 복사
cp -r folder folder_copy	# folder를 복사할 때는 -r 옵션이 필요함
  • cp는 copy의 약자로, 파일 또는 폴더를 복사할 때 사용하는 명령어

- Linux를 사용하는 이유

  • 무료로 사용할 수 있기 때문에
  • 리눅스는 오픈 소스이기 떄문에 전세계의 엔지니어들이 보안성을 향상시키기 위해 노력해왔음 -> 보안성이 좋음
  • 다른 종류의 OS에 비해 비교적 안정적인 환경에서 운영할 수 있음

<Linux 기반 EC2 instance 생성 방법>

  • AWS에 로그인 후 검색창에 EC2를 검색해서 들어온다
  • 지역을 서울로 맞추고 인스턴스 시작 버튼을 클릭한다
  • 아래 이미지를 따라한다

인스턴스 시작 클릭
인스턴스 이름을 정하고 OS는 우분투 22.04(현재 가장 최신 버전)를 선택하고 스크롤을 내린다
인스턴스 유형은 t2.micro(무료), 키페어는 없으면 만들고 있으면 선택한다(키페어 파일이 어딨는지 알고 있어야 함)

  • 키페어는 인스턴스에 접속할 때 필요하다

보안 그룹은 미리 만든 거 있으면 그거 선택하고 없으면 SSH, HTTP, HTTPS 다 선택한다

  • 원래 SSH는 내 IP로만 접속 가능하게 해야 하지만 지금은 테스트이므로 위치 무관으로 해도 상관없다

스토리지는 최대 30기가까지 무료로 쓸 수 있다

  • 이제 인스턴스 시작을 클릭한다!

  • 인스턴스 상태가 실행 중으로 바뀌면 사용할 준비 완료!!

<instance 접속 방법>

- SSH 연결하기

  • 맥은 터미널을 열고, 윈도우는 cmd나 파워쉘을 연다
  • 나는 윈도우이므로 cmd를 열었다

ssh -i .pem파일경로 ubuntu@인스턴스의퍼블릭IP
  • .pem 파일을 cmd 창에 드래그 해서 넣으면 자동으로 .pem 파일의 경로가 아래와 같이 적힘
  • 인스턴스퍼블릭IP는 인스턴스 클릭해서 보면 확인할 수 있고 cmd에 붙여 넣을 때는 오른쪽 마우스를 클릭하면 붙여짐

  • 하지만 권한이 없어서 접속이 안 된다 ㅎ
  • AWS 강의 떄 WSL에서 권한을 설정했으므로 그냥 cmd말고 WSL을 켜서 하겠다
  • 모르는 사람은 위 링크 따라가서 설정하고 오면 된다

  • 아 WSL도 안 되네,,,
  • 위에 링크에서 설정했던 대로 루트 폴더로 가서 거기 내가 만들었던 AWS 폴더에 권한을 줘야 하는군....

  • 바로 이렇게....
  • 근데 소유주로 변경하는 건 이전에 했어서 아마 할 필요가 없었을 거 같다
  • 만약 소유주로 안 되어 있다면 소유주를 내 계정으로 하고 나서 chmod 400 해서 읽기 권한을 줬어야 했을거다
  • 내 계정이 소유주가 되면 이미 권한이 다 생겨서 상관이 없을지도........? 아무튼
  • 처음에 /AWS 일 때 내 컴퓨터 경로가 아니라 .pem 파일을 입력했으면 바로 됐을 듯?
  • .pem 파일이 내 컴퓨터에 경로가 있고 wsl의 루트 폴더에 AWS 폴더 안에도 복사를 해놨는데
  • 내 컴퓨터 경로를 못 찾아서 그냥 루트 폴더에 내가 전에 만든 AWS 폴더에 권한을 주고 거기에 있는 .pem 파일을 이용해서 인스턴스에 접속했다
  • 하지만...cmd에서도 접속하는 방법을 알아보겠다
  • 일단 지금 내가 로그인한 윈도우 계정인 l에 .pem파일이 있는 AWS 폴더의 소유자로 만들고 사용권한을 줘야 한다(WSL에서 한 것처럼)
  • 그래서 win + R을 누르고 나온 창에 cmd 입력 후 아래 이미지와 같이 ctrl + shift + enter를 클릭해서 관리자 권한으로 cmd를 실행했다

  • 그리고 아래 명령어를 입력해서 AWS 폴더의 소유자가 되었다(명령어 참고 블로그로 이동!)
  • 폴더 경로는 그냥 cmd 열어서 폴더를 cmd 창으로 드래그 하면 경로가 입력된다 그걸 복사해서 넣었다
  • 관리자로 실행하면 드래그해서 경로를 가져오는 게 안 먹힌다
takeown /F AWS폴더경로 /R /D Y

icacls AWS폴더경로 /GRANT l:F /T /Q
  • 그 다음 위 명령어를 사용해서 l 계정에 AWS 폴더와 하위 폴더 및 파일에 대한 모든 권한을 주었다
  • 그렇게 하고 다시 cmd창을 켜서(관리자 X) 인스턴스에 접속하는 명령어를 치면 여전히 같은 에러가 뜬다

  • 열심히 구글링한 결과 당연히 권한 문제였는데 해당 파일에 너무 많은 사용자가 권한을 가지고 있어서 그런 거였다
  • 캡쳐는 못 했지만...
  • .pem 파일을 오른쪽 마우스 클릭해서 속성에 들어간다
  • 보안 탭을 보면

  • 지금은 권한을 다 삭제해서 하나만 있지만 원래는 빨간 박스를 다 채울 정도로 한 5갠가? 있었다
  • 만약 그렇게 되어 있는 경우 아래 고급을 클릭한다

  • 나는 지금 상속 사용 안함을 눌러서 상속 사용으로 보이지만 여러 사용자가 권한을 가지고 있다면 높은 확률로 상속 사용 안함 버튼으로 보일 거다
  • 그걸 누른 다음 2번째걸 클릭한다 뭐 상속된 권한 제거? 이런 식으로 써있을 거다
  • 그렇게 깨끗하게 해준 다음 아래 명령어를 입력하면 드디어 cmd를 이용해서 ssh로 인스턴스에 접속을 했다!!
ssh -i C:\Users\l\Desktop\sparta\AWS\newkeypair.pem ubuntu@3.37.128.85