AWS EC2 VScode 원격 개발환경 설정
보통 나는 Linux OS 사용을 위해 AWS EC2 생성후 SSH를 통해 접속 시, MobaXterm이나 Xshell을 사용한다.
그런데, EC2에서 python 스크립트를 개발할대마다 밖에서 작성해서 vi editor로 저장하는 것이 영 귀찮아서 알아보던 중
VScode에서 SSH로 직접 붙어서 사용할 수 있다는 것을 알게 되었다.
정리하는 김에 SSH가 활용하는 공개키 암호화 방식이 어떻게 되는지를 포함해서
VScode로 SSH 접속하게되는 원리를 알아보자
1. SSH 접속, 공개키와 개인키
AWS EC2에서는 SSH 접속시 key 인증방식을 디폴트로 제공하며,
EC2를 생성하고나면 개인키가 브라우저를 통해 자동으로 다운로드 된다.
SSH 키접속을 위해 사용되는 키는 RSA 알고리즘으로 생성된 공개키(public key)와 개인키(private key)이다.
말그대로 공개키는 서버에 위치하면서 누구에게나 공개되어도 상관없는 키이고,
개인키는 client만 가지고 있는 비밀키이다.
그럼, 어떻게 해서 공개키만
먼저, client측 PC에서 powershell을 실행시켜 ssh-keygen 명령어를 통해 rsa 키 한쌍을 생성해주었다.
생성된 2개의 파일중 id_rsa.pub가 공개키이고 id_rsa가 개인키이다.
공개키는 노출되어도 상관이 없으므로, 네트워크를 통해 Server단으로 이동해주면
Client는 개인키를 , Server는 공개키를 가지고 있게 되고, SSH 접속 준비가 끝나게 된다.
Client 측에 있는 개인키 보안과 관련하여 첨언하자면,
Client PC가 악성코드에 감염되면 키가 유출될 수 있고, 그렇게 되면 당연히 해당 서버에 아무나 접속할 수 있다.
따라서 키 생성시 paraphase 설정을 할 것을 권장하며, key pair는 주기적으로 변경하는 것이 좋다.
※ paraphase 설정 : 키를 암호화하여 디스크에 저장할 수 있는 추가 비밀번호 설정
!!
지금까지 설명한 것은 이해를 위한 것이므로 직접 할 필요는 없다.
AWS EC2는 instance 생성시 개인키를 다운로드 받을 수 있으므로
그 개인키를 가지고 있기만하면 VScode를 통해 SSH로 접속할 수 있다.
2. VScode 활용 SSH 접속
1) Remote Development 플러그인 설치
2) ssh config 파일 설정
F1을 누르고 'Remote-SSH:Connection to Host' > 'SSH 호스트구성' 항목을 클릭한다.
아래의 C:\Users\pogn\.ssh\config와 같이 사용자지정 ssh config를 설정한다.
VScode 기능을 활용하지 않고, 자신의 계정의 ssh설정파일 경로에 가서 직접 변경해줘도 된다.
- 경로 : USER/.ssh/config
- 내용 (사용자 = client)
Host [ client 지정 호스트명, 아무거나 입력해도 무방 ]
HostName [ 접속할 서버의 IP 또는 Domain ]
User [ 계정명 ]
Port [ 접속할 포트번호(22) ]
IdentityFile [ client에 있는 ssh 개인키 위치(~/.ssh/id_rsa.pem) ]
3) Remote Plugin을 통한 접속시도
다시 한번 F1을 통해 'Remote-SSH:Connection to Host' 메뉴로 진입해서
설정해뒀던 Host를 클릭하면 새로운 VScode 창이 뜨면서 접속이 시작된다.
해당 창에서 OS도 서버에 맞추어 Linux, Windows, MAC 중에 선택한다.
접속이 성공하면 창 하단에 아래와 같이 Host명이 표기된다.
4) 접속오류 발생 시 대처법
VScode에서 정상적으로 접속이 되지 않고 하기와 같은 오류가 발생하기도 한다.
The process tried to write to a nonexistent pipe. 또는 프로세스에서 없는 파이프에 쓰려고 했습니다.
이런경우, ssh 키 파일 경로 또는 config 파일 경로에 '한글'이 있는지 보고 영문으로 변경해준다.
config 파일 내의 오타여부에 대해서도 한번 꼼꼼히 점검해본다.
(나는 한참을 해멨는데 ssh config 파일에 오타가 있었다. IdentifyFile가 아니라 IdentityFile다...ㅋㅋ)
#. 참고자료
- ssh 공개키 암호화 방식
https://arsviator.blogspot.com/2015/04/ssh-ssh-key.html
https://rubensousadrible.github.io/sys-config/web/linux-server-ssh-key.html
- VScode 원격서버 연동
- SSH key pair 보안 관련 이야기