SSH key로 Linux 접속하기

 

 

일반적인 리눅스 환경은 SSH 접속을 패스워드 기반으로 수행하고 있습니다. 보안 관점에서 이러한 기본 방식은 별로 선호되지 않는데요, 사용자의 패스워드 관리가 소홀한 경우가 많기 때문입니다. 패스워드를 간단한 숫자조합 '1234'등으로 만든 다던가, 또는 아무데나 기록해둔다던가 말이죠.

 

AWS와 같은 클라우드 서비스는 이보다 견고한 보안 장치가 필요하고, 그럴 때 주로 SSH key 인증 방식이 활용됩니다. Private key를 갖고 있는 SSH 클라이언트에게만 접속을 허용하여 임의의 호스트에서 서버로 연결되는 것을 방지할 수 있습니다.

 

관련하여, 아래 제가 구축한 환경을 기준으로 SSH 키 연결 방법을 설명하겠습니다.

 

 

1. key 생성

 

ssh-keygen -t rsa -b 4096 -f mykey

`ssh-keygen` 명령어의 옵션은 다음과 같습니다.

  • `-t`: 키인증 알고리즘 종류 (ex. rsa, dsa, ecdsa 등)
  • `-b`: 키의 길의(비트 수), 주로 2의 거듭제곱인 1024, 2048, 4096 등이 많이 쓰입니다.
  • `-f`: 키파일의 이름
  • `-m`: 키파일의 포맷,  '`pem`'이라는 형식이 Apache 및 기타 웹 서버 플랫폼에서 사용되고 있습니다.
  • `-P`: 'passphrase'라고 private key를 보호하기 위한 추가적인 옵션입니다. 이 옵션을 비워두면 아래 이미지처럼 `ssh-keygen` 명령어 수행 시 passphrase를 입력하라고 하는데, 당장 필요한 것은 아니므로 Enter를 쳐서 넘어가도 무방합니다.  

 

 

 

`ssh-keygen` 명령어를 수행한 위치에 2개의 파일이 생성될 텐데요. 끝에 'pub'라는 확장자가 붙은 파일이 공개키(public key, '`mykey.pub`')이고, 다른 하나가 개인키(private key, '`mykey`')입니다.

 

2. 공개키 전송

 

개인키인 '`mykey`'는 SSH 클라이언트(예시에서는 `pyro@`)가 그대로 가지고 있어야 하며, 이와 반대로 공개키 '`mykey.pub`'는 접속하고자 하는 서버로 전달되어야 합니다. 공개키를 SSH 서버로 전달하는 가장 간단한 방법은 `ssh-copy-id` 명령어를 이용하는 것으로, `openssh`가 깔린 linux 환경이라면 기본적으로 지원되는 기능입니다.

ssh-copy-id -i mykey.pub vcentos@172.17.0.2

 

`ssh-copy-id`를 수행하는 도중에 연결하고자 하는 사용자계정의 패스워드를 물어보니, 입력하고 넘어갑니다 (방금 위 단계까지는 패스워드 기반 SSH 연결이 개방되어 있는 상태임을 주의하세요). 

 

미리 접속되있던 원격 서버에서 확인해보면, `vcentos@` 계정에 `.ssh` 디렉토리와 하위 파일이 생성되었음을 확인가능합니다. `authorized_keys` 안에는 SSH 클라이언트(`pyro@`)에서 전송한 공개키의 내용이 담겨있습니다.

 

 

3. 키 기반 인증 활성화

 

패스워드 대신 SSH 키를 통해서만 원격 서버에 접속할 수 있도록 SSH config 파일을 내용을 수정합니다. `/etc/ssh/sshd_config`로 들어가 아래 항목들의 주석을 해제/값을 변경해주세요.

  • PubkeyAuthentication    yes
  • AuthorizedKeysFile    .ssh/authorized_keys
  • PasswordAuthentication    no
sudo vi /etc/ssh/sshd_config

 

 

SSH 서비스를 다시 시작합니다.

sudo systemctl reload sshd

 

이제 클라이언트 측(`pyro@`)에서 원격지(`vcentos@`)로 접속해봅니다. 기존 방식대로 ssh 접속 시도를 할 경우, 아래 이미지처럼 Permission denied (publickey ...)과 같은 메세지가 발생합니다. 여기에 '`-i`'라는 옵션으로 Private key를 명시하면 정상적으로 서버에 연결할 수 있습니다.

ssh -i mykey vcentos@172.17.0.2

 

 

추가 Tip. 동일키 계정 간 공유

 

클라이언트에서 생성한 공개키는 여러 계정에서 돌려쓸 수 있습니다. 앞선 예제에서의 `vcentos@` 이외에도 원격 서버에 존재하는 다른 사용자 환경에도 접속 가능한 통로를 열어두고자 한다면, 아래와 같이 단계 2에서 생성된 `.ssh` 디렉토리를 새 사용자 계정 디렉토리에 그대로 복사하시면 됩니다.

su testuser // 테스트 계정으로 전환
cd

sudo cp -r /home/vcentos/.ssh/ .
sudo chown -R testuser .ssh/

반응형