리눅스는 SSH(Secure Shell) 접속을 위해 다양한 인증 방법을 제공합니다.
처음 설치 시 입력하는 계정과 비밀번호를 통해 접속하는 방법이 가장 기본적입니다.
다만 이 경우 네트워크 상에 중요한 비밀번호가 노출될 수 있다는 문제점이 존재합니다.
다른 방법은 공개키(Public Key)와 개인키(Private Key)를 생성해서 접속하는 방법입니다.
이 방법은 비밀번호를 노출시키지 않고 안전하게 서버에 접속할 수 있는 방법입니다.
공개키와 개인키 기반의 SSH 키로 리눅스 서버에 접속하는 방법을 알아보겠습니다.
기본적인 동작 방식은 다음과 같습니다.
- 클라이언트에서 공개키와 개인키를 생성
- 생성한 공개키를 서버에 전달
- 서버 접속 시 클라이언트의 개인키로 로그인
개인키는 절대 타인에게 노출되어서는 안 되는 키이기 때문에 공개키를 서버에 전달합니다.
공개키로 암호화된 것은 개인키로, 개인키로 암호화된 것은 공개키로 풀 수 있습니다.
클라이언트에서 서버로 메시지가 전달될 때는 다음과 같이 동작합니다.
- 클라이언트에서 개인키로 메시지를 암호화
- 서버에서 공개키로 복호화
내가 생성한 개인키로 암호화한 메시지는 나의 공개키로만 풀 수 있습니다.
그렇기 때문에 내가 발행한 메시지라는 것을 증명하는 의미가 있습니다.
이 방식은 공인인증서 등에서 본인을 확인하는 용도로 활용됩니다.
반대로 서버에서 클라이언트로 메시지가 전달될 때는 다음과 같습니다.
- 서버에서 공개키로 암호화
- 클라이언트에서 개인키로 복호화
서버에서 전달되는 중요한 정보는 오직 개인키를 소지한 본인만이 해독할 수 있습니다.
이것으로 강력한 보안이 제공됩니다.
가장 먼저 필요한 작업은 클라이언트에서 공개키와 개인키를 생성하는 작업입니다.
아래와 같이 ssh-keygen 명령어로 키 생성이 가능합니다.
ssh-keygen -t rsa -b 4096
옵션의 -t 다음에는 알고리즘을 입력하고 -b 뒤에는 키의 크기를 지정할 수 있습니다.
사용 가능한 알고리즘은 dsa, ecdsa, ecdsa-sk, ed25519, ed25519-sk, rsa 등이 있습니다.
보편적으로 많이 사용되는 RSA 알고리즘을 사용해서 키를 생성해보겠습니다.
먼저 생성된 키가 저장될 경로를 선택할 수 있습니다.
기본으로 설정된 홈의 .ssh 디렉터리를 사용하기 위해 그냥 엔터를 누르면 됩니다.
키에 추가로 암호를 설정하는 passphrase 입력 과정입니다.
높은 보안성을 제공하는 방법이지만 입력하지 않아도 되기 때문에 그냥 엔터를 2번 누르면 됩니다.
간단하게 키가 생성되며 아래 경로에서 확인 가능합니다.
~/.ssh/
윈도 환경의 경우 아래 주소에서 키를 확인 가능합니다.
%userprofile%\.ssh
파일을 확인하면 id_rsa와 id_rsa.pub이라는 파일이 생성되어 있습니다.
개인키인 id_rsa는 절대 유출되지 않도록 주의해야 합니다.
아래 명령어로 서버에 id_rsa.pub 파일을 전달해주면 설정이 완료됩니다.
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.1.15
명령어의 username 부분은 실제 서버 접속 시 사용하는 계정을 입력해주면 됩니다.
처음에 접속을 계속할 것인지 물어보면 yes를 입력하면 됩니다.
다음으로 서버 주소에 입력한 username의 비밀번호를 입력해주면 키가 안전하게 복사됩니다.
키 전달 과정에서 아래와 같은 에러가 발생할 수 있습니다.
REMOTE HOST IDENTIFICATION HAS CHANGED! |
이 경우 아래 링크를 통해 기존에 등록된 키를 제거한 후에 다시 ssh-copy-id 명령어를 입력하면 됩니다.
2020/08/14 - [IT/Linux] - SSH 접속 시 REMOTE HOST IDENTIFICATION HAS CHANGED! 문제 해결
마지막으로 아래 명령어로 SSH 접속을 시도해보면 비밀번호 입력 없이 연결이 되는 것을 확인할 수 있습니다.
ssh username@192.168.1.15
이제 비밀번호 입력 없이 안전하고 편리하게 SSH 접속이 가능합니다.
'IT > Linux' 카테고리의 다른 글
리눅스 scp 명령어로 서버 간 파일 복사 (0) | 2020.10.27 |
---|---|
리눅스 시간 확인 및 타임존(Time zone) 변경 방법 (2) | 2020.08.22 |
SSH 접속 시 REMOTE HOST IDENTIFICATION HAS CHANGED! 문제 해결 (0) | 2020.08.14 |
[Ubuntu] Hyper-V에 우분투 서버 20.04 설치 방법 (0) | 2020.08.03 |
[Ubuntu] VMware에 우분투 서버 20.04 설치 방법 (1) | 2020.05.04 |