TroubleShooting

[Docker, EC2, SCP] SCP 명령을 통해 로컬에서 EC2로 파일을 옮기는 과정에서 겪었던 야크 털 쉐이빙

아임다디 2022. 5. 9. 15:04

데브옵스 부트캠프 세 번째 프로젝트에서 했던 야크털 깎기 중 최고봉은 바로바로 로컬에서 ec2로 scp 명령어를 통해 파일을 전달할 때 발생했던 삽질들이었다

목표는 로컬에서 EC2로 scp 명령어를 통해 도커 이미지 빌드에 필요한 파일들을 보낸 후, 이미지를 빌드하여 실행시켜 로컬이 아닌 EC2 환경에서 도커 이미지가 실행되도록 하는 과정이었다.

정말 많은 야크 털 쉐이빙 과정을 겪었는데 하나씩 풀어보겠다.

save는 돌아가는 길이에요


상황

docker 이미지를 로컬에서 ec2로 옮기기 위해 구글링을 해보던 중 이 글을 발견했다
이 글에 나와있는 설명을 간단하게 정리해보자면

  1. 로컬에서 docker 이미지를 만든다
  2. 이미지를 tar 확장자로 docker save 명령을 통해 저장한다
  3. scp 명령을 통해 원격 서버로 tar 파일을 전송한다
  4. 원격서버에서 전송된 tar 파일을 docker load를 통해 이미지로 저장한다
  5. 저장된 도커 이미지를 실행한다

하다가 왜 tar 확장자로 저장하는지 이해가 안돼서 크루분께 여쭤봤더니 돌아오는 말..

save는 돌아가는 길이에요 save 쓰지마세요

네...

해결

그냥 Dockerfile만 ec2로 옮겨서 ec2에 이미지를 만든 뒤 run하기만 하면 됐다..

  1. scp로 Dockerfile과 index.html을 ec2로 옮겨준다
  2. ec2에서 이미지를 빌드한다
  3. Run..

나갈때는 마음대로지만 들어올땐 아니란다


상황

scp 명령을 통해 Dockerfile과 index.html을 보내고싶은데 계속 권한 에러가 떴던 상황이었다

scp 명령어 사용법을 구글링으로 찾았을 때 다음과 같이 사용하는 것을 알 수 있었다

scp [옵션] [파일명] [원격지_id]@[원격지_ip]:[받는 위치]

그래서 명령어를 이렇게 썼더니

scp Dockerfile ubuntu@퍼블릭IP주소:/Dockerfile

응 안돼

[ubuntu@퍼블릭IP](mailto:ubuntu@퍼블릭IP): Permission denied (publickey).
lost connection

에러메시지를 복사해서 구글링을 해보니 역시 aws 레퍼런스를 잘 준비해놨다

이 레퍼런스(야크털 쉐이빙 지름길^^)대로 해보자면

  1. 로컬에서 ssh 퍼블릭 키 값을 복사한다
  • 키 값 위치는 ~/.ssh/id_rsa.pub 에서 확인할 수 있습니다
  1. ec2에서 다음 명령어를 실행해준다
    $ echo '복사한 ssh 퍼블릭 키' >> /home/ubuntu/.ssh/authorized_keys
  2. 권한을 수정한다
    $ sudo chown root:root /home
    $ sudo chmod 755 /home
    $ sudo chown ubuntu:ubuntu /home/ubuntu -R
    $ sudo chmod 700 /home/ubuntur /home/ubuntu/.ssh
    $ sudo chmod 600 /home/ubuntu/.ssh/authorized_keys
  3. ec2를 종료한다

다 하고 다시 위의 명령어를 실행했지만 같은 에러를 뱉었고, ec2에 다시 들어가려고 하자
띠용! ec2에 접속 자체가 안된다!!!

ec2 접속 명령어를 통해 접속을 시도해도 이전에 봤던 에러 [ubuntu@퍼블릭IP](mailto:ubuntu@퍼블릭IP): Permission denied (publickey).를 반환하며 접속 자체가 안됐다

나갈때는 마음대로지만 들어올때는 아니란다도 아니고 허허

결국 ec2를 새로 만들게 되었다..

해결

이런 뻘짓을 안해도 scp 명령의 옵션을 통해 ec2에 간단하게 접속할 수 있었다

scp -i 'pem키_주소' index.html ubuntu@'퍼블릭IP':/index.html

아 허무하다

파일 경로 이슈


상황

위에서 사용한 scp 명령어를 사용하면 사실 또 다른 에러를 뱉는다

scp: /index.html: Permission denied

이건 진짜 멍청한 실수였다
경로를 /index.html로 해놓으면 root 폴더에 index.html 파일을 옮긴다는 건데 당연히 권한 에러가 뜰 수 밖에 없다

해결

홈 디렉토리를 애용합시다 ㅎㅎ

scp -i 'pem키_주소' index.html ubuntu@'퍼블릭IP':/home/ubuntu/index.html

결론


  1. 새로운 명령을 사용할 때는 명령 사용법을 잘 알아봅시다
  2. 구글링 할 때 한 글만 보지 말고 다른 글들도 보면서 다양한 방법을 찾아봅시다
  3. EC2는 나쁩니다