SSH 설정하기 (feat. Windows & WSL)
배경
SSH는 “Secure Shell”을 의미하며 개발 환경 설정에서 반드시 필요하다.
SSH 셋팅 방법을 간단히 정리해 보자.
먼저 SSH 통신을 간단히 이해해 보자. 우리는 일상에서 나만 드나들고 싶은 장소가 있을 때, 열쇠와 자물쇠를 사용한다. 열쇠는 나만 가지고 있어야 하므로 숨겨야 하고, 자물쇠는 문 앞에 걸어 두는 것이므로 숨길 필요가 없다. 이런 논리가 SSH에서도 그대로 적용된다. SSH에서도 열쇠와 자물쇠를 이용하며, 이 열쇠와 자물쇠 쌍을 key pair라고 한다.
SSH 통신을 위해서 최초에 다음 절차가 필요하다.
- 나만의 열쇠(private key)와 공개될 자물쇠(public key) 쌍을 만든다.
- 열쇠는 나만 가지고 있고(local client), 자물쇠는 내가 들어가려는 장소(remote server)에 준다.
이제 매번 통신을 할 때 열쇠와 자물쇠가 서로 맞는지만 확인 한 후에 통신을 하게 된다.
Local Client Side
보통 SSH server가 있는 경우가 많으므로, 내 컴퓨터에서 server로 어떻게 접속하는가가 문제가 된다. 이를 먼저 살펴보자. ubuntu와 같은 linux 기준 설명이다.
keypair 만들기
“나만의 열쇠(private key)와 공개될 자물쇠(public key) 쌍을 만든다.”
# ssh-keygen -t <암호화 알고리즘> -b <암호화 비트>
ssh-keygen -t rsa
위와 같이 하면 ~/.ssh
폴더가 생기고 그 아래 ssh keypair가 생긴다. 보통 기본 이름은 id_rsa
(private key)와 id_rsa.pub
(public key)이다.
Remote Server에 등록하기
“열쇠는 나만 가지고 있고(local client), 자물쇠는 내가 들어가려는 장소(remote server)에 준다.”
이제 local client에 위치한 공개키를 들어가고자 하는 장소, 즉 remote server에 주어야 한다. 공개키 내용을 remote server에 있는 자물쇠 파일에 추가해 주는 과정이다.
local client의 공개키는 보통 ~/.ssh/id_rsa.pub
를 가리키며, remote server에 있는 자물쇠 파일은 보통 ~/.ssh/authorized_keys
을 가리킨다.
local client의 공개키를 remote server로 전송하여 복사한 뒤에, 그 파일 내용을 다시 자물쇠 파일에 덧붙여야 한다. 복잡하게 느껴진다. 다행히 아래와 같이 간단한 app으로 이 과정을 수행할 수 있다.
# Local Clent (`~/.ssh/id_rsa.pub`) → 내용 덧붙이기 → Remote Server (`~/.ssh/authorized_keys`)
ssh-copy-id <remote_server_username>@<remote_server_ip>
이제 설정은 모두 끝났다. 이제 다음과 같이 remote server에 접속하면 비밀번호를 묻지 않을 것이다.
ssh <remote_server_username>@<remote_server_ip>
Windows & WSL
자, 이제 윈도우와 WSL에서 SSH를 설치하는 문제를 해결해 보자. WSL은 Windows의 하위 시스템이지만, 네트워크 설정은 독립되어 있다. 따라서 SSH를 윈도우와 WSL에 모두 설정해 주어야 양쪽에서 모두 원하는 Server에 접속할 수 있다.
SSH는 linux에서 다루기 편리하다. 그러므로 WSL 쪽에서 SSH을 설정한 다음, Windows로 설정을 가져오는 방식을 사용해보자.
WSL에서 SSH를 설정하는 방법은 바로 앞의 글 그대로 하면 된다.
그 다음은 WSL에서 Windows로 SSH 설정 파일 전체를 복사해주면 된다. 다음과 같이 하자.
# WSL에서 실행한다.
# WSL의 SSH 설정을 Windows 해당 폴더로 복사한다.
cp ~/.ssh/. -R /mnt/c/Users/<Username>/.ssh/
SSH에는 접속한 server가 신뢰할 수 있는 곳인지 기록해 두는 목록이 있다. 이 목록은 SSH server에 접속할 때 변경되므로, 복사가 아니라 링크를 통해 WSL과 Windows 양쪽에서 사용할 수 있도록 해두어야 한다.
# WSL에서 실행한다.
# Windows의 known_hosts file을 WSL 해당 위치에 링크로 만든다.
ln -s /mnt/c/Users/<Username>/.ssh/known_hosts ~/.ssh/known_hosts
이렇게 하면 Windows에서도 WSL의 SSH 설정을 그대로 사용할 수 있다.
참고로 SSH 공개키를 SSH Server에 등록하기 위해서 위에서는 linux의 ssh-copy-id
를 사용했었다. Windows에서 SSH 공개키를 SSH Server에 등록하기 위해서는 다음과 같이 하면 된다.
윈도우에서는 ssh-copy-id
가 없기 때문에 조금 복잡하지만 아래와 같이 직접 수행할 수 있다. ref
웬만하면 linux에서 하자.
# Power Shell
PowerShell -Command type $env:USERPROFILE\.ssh\id_rsa.pub | ssh <remote_username>@<remote_server_ip> "cat >> .ssh/authorized_keys"
Remote Server Side
다음에 추가하련다.