wsl에서 ssh로 원격 서버에 접속하기 (ft. mnt란 무엇인가)

Jiumn·2023년 7월 6일
1

문제 상황

그동안 puTTY만 쓰다가 윈도우여도 예쁜 리눅스 쉘은 써보고 싶어..! 라는 열망으로 wsl을 설치했다. 야심차게 zsh를 깔고 oh-my-zsh 설치 후 zsh-autosuggestions(자동 완성)과 zsh-syntax-highligting 플러그인도 설치했다.

기본 세팅이 끝나고 본격적으로 ssh private key 방식으로 원격 서버에 접속하려고 하자 permission denied 에러가 발생했다.

(* 이 글은 wsl에 ssh 서버를 구성하는 게 아니라, wsl에서 다른 리눅스 서버로 원격 접속할 때 발생한 문제에 대해 다룬 글입니다.)

해결

1. 파일 경로 수정

우선 회사에서 매일 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) 권한을 다 열어주는 권한)

2. 권한 설정

이런 경우에는 파일 권한을 600으로 바꿔줘야 한다고 한다.
(슈퍼 유저에게만 읽기(4) + 쓰기(2) 권한을 주는 것)

chmod 600 [파일 명]

파일 권한을 변경하는 명령어를 입력했지만 파일 자체의 권한이 바뀌지 않았다.

리눅스는 상위 폴더의 영향을 받기 때문이다.

즉, 상위 폴더의 권한도 바꿔줘야 하는데 C 디렉토리에 위치한 상태에서는 상위 폴더가 첩첩산중이라 단순한 저장 위치가 좋을 것 같았다. 그래서 ~/.ssh 폴더로 저장 위치를 바꿔줬다.

ssh -i ~/.ssh/[private key].pem [username]@[ip]

드디어 원격 접속 성공 !!!

3. alias 설정하기

여러 서버를 접속해야 하는데 매번 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만 치면 아주 쉽고 편하게 원하는 서버에 원격 접속을 할 수 있다.

* 참고: https://hudi.blog/ssh-config/

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글