본문으로 바로가기

Git, SSH연결등에는 SSH Key가 필요할 수 있습니다. 윈도우즈나 리눅스에 별도로 서로 다른 SSH Key를 마련한다면 관리에 어려움이 따를 수 있으니 하나의 SSH Key를 사용해보도록 합시다.

Windows Subsystem for Linux SSH Key설정

SSH Key의 공유

처음에는 막연히 윈도우즈에 SSH Key를 생성하고 이를 WSL상에서 마운트한다거나 심볼릭 링크를 걸어주면 해결될 일이라고 생각했다. 문제는 윈도우즈에서 WSL로 마운트되거나 심볼릭 링크가 걸리는 디렉토리, 파일들이 권한 문제가 발생할 수 있다는 것이다. 특히나 SSH는 비공개(개인) 키에 대해 권한이 엄격하기에 윈도우즈로 심볼릭 링크되는 키를 무시해 버린다. SSH의 매뉴얼 페이지에는 다음과 같이 아주 명확하게 설명하고 있다.

  • ~/.ssh/id_rsa

    인증을 위한 개인(private) 키이다. 이러한 파일에는 중요한 데이터가 들어있어 사용자가 읽을 수 있어야하지만 다른 사용자가 접근할 수 없어야한다(읽기/쓰기/실행). SSH는 다른 사용자가 접근할 수 있는 경우 개인 키 파일을 무시한다.

즉, 처음 생각과는 달리 단순히 키 하나를 저장해두고 공유해서 쓰는 방법은 안되고, 해당 키를 복사해서 윈도우즈와 WSL 모두에 넣어두는 방식으로 전환해야 한다. 같은 키를 사용한다는 것에 위안을 삼자.

WSL에서 SSH Key 생성

사용 권한 문제로 ~/.ssh와 윈도우즈의 C:\Users\사용자명/.ssh에 넣어둘 것이다. 우선은 WSL을 실행하여 SSH Key를 만들어보자.

$ ssh-keygen -t rsa -b 4096

Generating public/private rsa key pair.
Enter file in which to save the key (/home/uzugoer/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/uzugoer/.ssh/id_rsa.
Your public key has been saved in /home/uzugoer/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:aFNdpdB2fEPGgEDLQZ8k0Lwc0aF5ddEAjYKAPLQZ8k uzugoer@LUNA-DEV
The key's randomart image is:
+---[RSA 4096]----+
|  *O+B+*O=o..o.o=|
|   +.=*+* E. O+= |
|    .o  =.o . o+*|
|       + .   o oo|
|        S   .   .|
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

생성할 경로와 비밀번호를 묻는데 엔터를 누르면 자신의 홈디렉토리에 .ssh 디렉토리에 파일이 쌍으로 만들어진다. id_rsa는 개인키, id_rsa.pub은 공개키며 , known_hosts는 연결구성을 승락한 곳의 fingerprint 정보를 지니고 있다(원격 접속을 시도하려는 서버에 처음접속하고 yes를 입력하면 생김)

$ pwd
/home/uzugoer/.ssh

$ ll
total 8
drwx------ 0 uzugoer uzugoer  512 Feb 21 17:04 ./
drwxr-xr-x 0 uzugoer uzugoer  512 Feb 20 19:15 ../
-rw------- 1 uzugoer uzugoer 3243 Feb 21 17:04 id_rsa
-rw-r--r-- 1 uzugoer uzugoer  742 Feb 21 17:04 id_rsa.pub
-rw-r--r-- 1 uzugoer uzugoer  426 Feb 20 19:37 known_hosts

생성한 키파일들을 윈도우즈의 디렉토리로 복사하기위해cp ~/.ssh/. -R /mnt/c/Users/사용자명/.ssh/ 와 같은 명령을 사용한다.

$ cp ~/.ssh/. -R /mnt/c/Users/uzugo/.ssh/

정상적으로 복사되었다.

known_hosts 파일은 윈도우즈와 WSL 상에 심볼릭링크를 ln -s /mnt/c/Users/사용자명/.ssh/known_hosts ~/.ssh/known_hosts 와 같이 걸어두어도 된다(윈도우즈와 WSL 연결설정을 따로따로 물으면 귀찮으니까...)

ln -s /mnt/c/Users/uzugo/.ssh/known_hosts ~/.ssh/known_hosts

$ cd .ssh |  ll
total 8
drwx------ 0 uzugoer uzugoer  512 Feb 21 17:45 ./
drwxr-xr-x 0 uzugoer uzugoer  512 Feb 20 19:15 ../
-rw------- 1 uzugoer uzugoer 3243 Feb 21 17:04 id_rsa
-rw-r--r-- 1 uzugoer uzugoer  742 Feb 21 17:04 id_rsa.pub
lrwxrwxrwx 1 uzugoer uzugoer   35 Feb 21 17:45 known_hosts -> /mnt/c/Users/uzugo/.ssh/known_hosts*

SSH Key를 제외한 다른것들은 윈도우즈에서 리눅스의 다이렉트 접근은 심볼릭링크나 마운트로 대체하고, 파일 생성, 수정, 이동등은 리눅스에서 윈도우즈로는 제한이 없다는 것을 다시 한번 유념하도록 하자.