그동안 puTTY만 쓰다가 윈도우여도 예쁜 리눅스 쉘은 써보고 싶어..!
라는 열망으로 wsl을 설치했다. 야심차게 zsh를 깔고 oh-my-zsh 설치 후 zsh-autosuggestions(자동 완성)과 zsh-syntax-highligting 플러그인도 설치했다.
기본 세팅이 끝나고 본격적으로 ssh private key 방식으로 원격 서버에 접속하려고 하자 permission denied
에러가 발생했다.
(* 이 글은 wsl에 ssh 서버를 구성하는 게 아니라, wsl에서 다른 리눅스 서버로 원격 접속할 때 발생한 문제에 대해 다룬 글입니다.)
우선 회사에서 매일 puTTY로 정상적으로 접속 중인 private 키에는 문제가 없다고 생각했다.
No such file or directory
에러 메시지를 잘 살펴보니 애초에 파일 경로를 찾지 못하고 있었다.
그렇다면 분명히 파일 경로를 표시하는 방식에 문제가 있는 것이라고 생각했다. (\
자체를 인식하지 못하는 듯)
private 키를 드래그 앤 드롭으로 wsl에 끌어다 놓는 방식으로 경로를 입력했는데, 이때 자동적으로 윈도우 방식의 파일 경로가 입력됐다. 일단 \
(윈도우 식)로 표현된 것을 /
(유닉스 방식)으로 변경했다.
그 다음으로 에러 메시지에는 파일 경로의 /는 표시됐지만 여전히 파일 경로를 인식하지 못하고 있었다. (No such file or directory
)
wsl은 Windows 파일 시스템에 마운트된 별도의 디렉토리를 제공한다. 따라서 C:\
와 같은 형식이 아니라 /mnt/c/Users ~
와 같은 형태로 입력해줘야 한다.
이와 같이 경로를 변경해주니 다른 에러 메시지가 나타났다.
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0777 for '/mnt/c/Users/82102/Desktop/[private key].pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/mnt/c/Users/82102/Desktop/[private key].pem": bad permissions
[username]@[ip]: Permission denied (publickey).
해석해보면 파일 권한 설정이 너무 오픈되어 있어서 안전하지 않다는 것이다.
(777은 모든 계정에 읽기(4), 쓰기(2), 실행(1) 권한을 다 열어주는 권한)
이런 경우에는 파일 권한을 600으로 바꿔줘야 한다고 한다.
(슈퍼 유저에게만 읽기(4) + 쓰기(2) 권한을 주는 것)
chmod 600 [파일 명]
파일 권한을 변경하는 명령어를 입력했지만 파일 자체의 권한이 바뀌지 않았다.
리눅스는 상위 폴더의 영향을 받기 때문이다.
즉, 상위 폴더의 권한도 바꿔줘야 하는데 C 디렉토리에 위치한 상태에서는 상위 폴더가 첩첩산중이라 단순한 저장 위치가 좋을 것 같았다. 그래서 ~/.ssh 폴더로 저장 위치를 바꿔줬다.
ssh -i ~/.ssh/[private key].pem [username]@[ip]
드디어 원격 접속 성공 !!!
여러 서버를 접속해야 하는데 매번 ssh -i 옵션으로 키를 다 입력하는 것은 번거롭다. 내친 김에 alias(별칭)을 설정해서 편하게 여러 개의 서버를 원격 접속해보자.
~/.ssh 폴더 하위에 vim 에디터로 config 파일을 만든다.
cd ~/.ssh
vim config
config 파일 안에 다음과 같이 별칭으로 쓸 이름(Host)과 ip 주소, 사용자 이름, 포트 번호, ssh private 키의 경로를 입력한다.
Host hostname
HostName XXX.XXX.XXX.XXX
User ubuntu
Port 22
IdentityFile ~/.ssh/XXXXXXX.pem
서버가 여러 개라면 아래에 계속 같은 형식으로 덧붙이면 된다.
ssh hostname
이제 wsl에서 ssh과 alias만 치면 아주 쉽고 편하게 원하는 서버에 원격 접속을 할 수 있다.