VSCode는 코드 편집기로 많이 알려져있지만 다양한 확장이 존재하여 Linux 원격 서버에 접속할 때 많은 편의 기능을 제공해줘서 아주 유용하게 사용하고 있는 나만의 광명이다. 그런데 원격 서버에 접속할 때마다 비밀번호를 입력하는 게 여간 귀찮은데, 접속할 때 1번 / 파일 탐색기 열 때 1번 / 세션 다시 로딩될 때마다 비밀번호를 입력해줘야 하기 때문.. 그런데!
공개 키 방식을 이용하면 VSCode에서도 비밀번호 없이 서버에 접속할 수 있다!
공개 키 방식이란?
정보통신, 보안에서 사용되는 용어이자 보안 방식으로 데이터 전송에서 데이터를 암호화하는 키는 공개되지만 암호를 해독하는 키는 접근 권한이 있는 상대방에게만 알려 줌으로써 데이터를 암호화하여 전송하고 수신할 수 있는 데이터 통신 시스템. 전공자라면 보안 공부할 때 다들 익히 들어봤을 것이다.
공개 키를 이용하여 비밀번호 없이 세션 접속하는 방법
공개 키 방식을 이용하기 위해 먼저 (비밀번호 대신 사용할) 공개키와 개인키를 발급받아야 한다.
1. 공개키, 개인키 발급하기
Windows Powershell, 또는 cmd를 열고 아래 명령을 입력한다.
$ ssh-keygen -t rsa -b 4096
Enter file in which to save the key, Enter passphrase, Enter same passphrase again 등등 입력하라는 게 많은데 Enter만 눌러 쭉 스킵해주면 키 발급이 아주 간단하게 완료된다.
Enter same passphrase again: 아래의 Your ~~~ 부분이 키가 저장된 위치인데, 해당 디렉토리로 접근해야 한다.
- [개인키] id_rsa : Host PC(로컬)에 저장
- [공개키] id_rsa.pub : VM(서버)에 저장
공개키와 개인키가 발급이 완료되었으면 이제 서버에 공개키를 넣어줘야 한다.
파일 이름을 다르게 사용하므로, 파일 자체를 옮기지 않고 간단하게 새로 파일을 작성하도록 한다.
홈디렉토리 아래의 .ssh 디렉토리에 authorized_keys 파일을 생성하여 id_rsa.pub 파일의 내용을 붙여넣는다. 만약 .ssh 디렉토리가 없다면 mkdir 명령어를 이용하여 폴더를 생성해주면 된다. (.ssh 아래에 authorized_keys 파일만 있으면 됨)
$ cd /home/po7java/.ssh
$ cat > authorized_keys
(id_rsa.pub 파일 내용 붙여넣은 후 Ctrl + C 입력하여 편집 종료)
2. VSCode 설정 변경 및 접속
키 발급 및 저장이 완료되었으므로 VSCode에서 SSH Config 파일을 변경한 뒤 접속을 시도한다.
VSCode에서 F1(단축키) 키를 누르고 [SSH 구성 파일 열기...] 버튼을 클릭해 Config 파일을 연다.
config 파일은 config, ssh-config로 두 가지일텐데 일반 config 파일을 수정하여 사용한다.
해당 config 파일은 로컬의 개인키(id_rsa)와 동일한 디렉토리에 존재해야 한다. (옮기지 않았으면 원래 같은 곳에 있음)
VSCode로 원격 접속을 사용한 이력이 있다면 Host, HostName, User + 기타 옵션들이 작성되어 있을텐데, 그 아래에 IdentityFile 옵션을 추가하여 로컬의 개인키 경로를 추가해준다. 원격 접속 방법을 모르거나 까먹었다면?
IdentityFile C:\Users\user\.ssh\id_rsa
이제 다시 SSH로 서버에 접속해보면 비밀번호 입력 과정이 생략된 채로 세션 이용이 가능하다!
[VSCode] Visual Studio Code로 VMware CentOS(Linux)에 SSH 접속하기
Windows에서 Linux를 사용하는 방법은 다양하지만(PuTTy, MobaXTerm, Docker...), 파일 탐색기와 코드 편집, BITMAP 등 이미지 파일의 확인, 많은 확장 프로그램 활용까지 가능한 VSCode를 가장 선호한다. VSCode란
idox.tistory.com
(추가)
공개키를 이용한 SSH 로그인 불가시 해결 방법
만약 위의 방법대로 했는데 공개키를 이용하지 않고, 여전히 비밀번호 입력을 요구한다면 설정이 제대로 되지 않은 것이다. 아래 절차를 따라 수행하면 해결될 것임
(1) .ssh 디렉토리와 authorized_keys 파일의 권한 설정 문제
각각 0700, 0600으로 설정되어 있어야 정상 실행되며 Group/Others에 더 높은 권한이 부여된 경우 동작하지 않는다. 아마 보안상의 문제로 필요한 권한보다 많이 할당된 경우 동작하지 않도록 되어있는듯?
- .ssh 디렉토리 > 0700
- authorized_keys > 0600
$ cd
$ ls -al | grep ssh
drwxrwxr-x 2 idox idox 29 4월 7 18:38 .ssh
$ sudo chmod 0700 .ssh
$ ls -al | grep ssh
drwx------ 2 idox idox 29 4월 7 18:38 .ssh
$ cd .ssh
$ ll
-rwx------ 1 idox idox 745 4월 7 18:39 authorized_keys
$ sudo chmod 0600 authorized_keys
$ ll
-rw------- 1 idox idox 745 4월 7 18:39 authorized_keys
(2) /etc/ssh/sshd_config 파일 수정 - 공개키 기반 인증 허용
※ .ssh, authorized_keys 권한 수정으로 해결되었다면 sshd_config 파일은 수정하지 않아도 됨
CentOS를 기준으로 /etc/ssh/sshd_config 파일이 ssh 설정 파일인데, 서버에서 공개키를 이용한 인증 방식을 허용할 것인지를 설정해주어야 한다. 아래 내용이 주석처리된 경우 풀어준다.
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
- RSAAuthentication yes > RSA 인증 방식 허용
- PubkeyAuthentication yes > Pubkey(공개키) 인증 방식 허용
- AuthorizedKeysFile .ssh/authorized_keys > 공개키가 저장될 위치 지정 (홈디렉토리 아래의 .ssh)
$ service sshd restart