SSH Key란?
서버에 접속 할 때 비밀번호 대신 key를 제출하는 방식이다.
SSH Key는 언제 사용하는가?
- 비밀번호 보다 높은 수준의 보안을 필요로 할 때
- 로그인 없이 자동으로 서버에 접속 할 때
SSH Key가 동작하는 방식
SSH Key는 공개키(public key)와 비공개 키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개키와 비공개키가 만들어진다. 이 중에 비공개키는 로컬 머신에 위치해야 하고, 공개키는 리모트 머신에 위치해야 한다. (로컬 머신은 SSH Client, 원격 머신은 SSH Server가 설치된 컴퓨터를 의미한다.)
SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개키와 원격 머신의 비공개키를 비교해서 둘이 일치하는지를 확인한다.
SSH Key 만들기
SSH Key를 통해서 서버에 접속 할 때 Unix 계열(리눅스, 맥)에서는 ssh-keygen이라는 프로그램을 이용하면 된다. 윈도우 머신에서는 SSH Client 프로그램이 자체적으로 제공하는 키 생성 프로그램을 이용하면 된다. 각 프로그램의 메뉴얼을 참조하자. 이번 수업에서는 Unix 계열에서 key를 생성하는 방법을 알아본다.
ssh-keygen 사용하기
아래와 같이 입력한다. -t rsa는 rsa라는 암호화 방식으로 키를 생성한다는 의미다.
1
2
|
[axl@asterisk1 axl]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
|
SSH 키를 저장할 위치를 지정한다. 엔터를 누르면 기본 경로에 저장된다. 기본 경로는 로그인 한 사용자의 홈디렉토리 아래에 .ssh이다. ($HOME/.ssh) SSH Client는 기본적으로 이 디렉토리에 있는 키를 이용해서 인증을 시도한다.
1
|
Enter file in which to save the key (/home/axl/.ssh/id_rsa): <return>
|
passphrase 를 입력한다. passphrase는 일종의 비밀번호로 비공개키를 입력한 값으로 암호화한다. 권장 값은 10~30 문자이고 생략 가능하다. 생략하면 이 부분이 보안 홀이 될 수 있기 때문에 주의한다. 자동 로그인을 원한다면 생략해야 한다.
1
|
Enter passphrase (empty for no passphrase): <Type the passphrase>
|
비밀번호를 확인한다. 같은 값을 입력하면 된다. 아래와 같이 출력된다면 키가 생성된 것이다.
1
2
3
4
5
|
Enter same passphrase again: <Type the passphrase>
Your identification has been saved in /home/axl/.ssh/id_rsa.
Your public key has been saved in /home/axl/.ssh/id_rsa.pub.
The key fingerprint is:
0b:fa:3c:b8:73:71:bf:58:57:eb:2a:2b:8c:2f:4e:37 axl@myLocalHost
|
키를 확인한다.
1
|
[axl@asterisk1 axl] ls -al ~/.ssh/
|
아래와 같이 출력되면 성공한 것이다.
drwx------ 2 egoing egoing 4096 Feb 18 18:54 .
drwxr-xr-x 16 egoing egoing 4096 Mar 1 06:02 ..
-rw-rw-r-- 1 egoing egoing 790 Feb 19 06:04 authorized_keys
-rw------- 1 egoing egoing 1675 Feb 18 18:51 id_rsa
-rw-r--r-- 1 egoing egoing 395 Feb 18 18:51 id_rsa.pub
-rw-r--r-- 1 egoing egoing 2216 Feb 19 18:34 known_hosts
authorized_keys 파일은 없을수도 있다.
각 파일에 대한 설명은 아래와 같다.
id_rsa | private key, 절대로 타인에게 노출되면 안된다. |
id_rsa.pub | public key, 접속하려는 리모트 머신의 authorized_keys에 입력한다. |
authorized_keys | 리모트 머신의 .ssh 디렉토리 아래에 위치하면서 id_rsa.pub 키의 값을 저장한다. 자세한 내용은 다음 단락을 참조 |
.ssh 디렉토리는 매우 중요한 보안 정보가 담긴 디렉토리다. 따라서 퍼미션 설정을 꼭해야 하는데 아래와 같은 설정을 권장한다. 아래의 명령을 순차적으로 실행한다. 퍼미션에 대한 자세한 정보는 생활코딩 리눅스 수업을 참조한다.
1
2
3
4
5
|
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
|
이제 id_rsa.pub 파일을 리모트 서버의 $HOME/.ssh/authorized_keys 파일에 추가해줘야 한다. 아래의 그림을 보자.
SSH Server의 authorized_keys 의 내용이 SSH Client의 id_rsa.pub 파일과 같아야 한다. 그래서 ssh 접속을 할 때 id_rsa 파일과 authorized_keys 파일의 내용을 비교 할 수 있다. 일반적으로 SCP를 사용한다. SCP는 파일을 전송하는 프로그램인데, 아래와 같은 형식을 갖는다.
scp $HOME/.ssh/id_rsa 리모트 머신의 아이디@리모트 머신의 호스트 주소:저장할 파일
위의 형식에 따라서 로컬 머신의 id_rsa.pub 파일을 리모트 머신의 홈디렉토리로 전송해보자. 아래는 SSH Client가 설치된 로컬 머신에서 실행하는 명령이다.
1
|
scp $HOME/.ssh/id_rsa.pub egoing@egoing.net:id_rsa.pub
|
아래와 같은 메시지가 뜬다면 전송에 성공한 것이다.
id_rsa.pub 100% 395 0.4KB/s 00:00
이제 원격 머신에서 전송한 id_rsa.pub 파일을 authorized_keys 파일에 추가해보자. 아래의 명령에서 cat는 뒤에 따라오는 파일의 내용을 화면에 출력하는 것이고, >> 는 cat이 출력한 내용을 authorized_keys 파일에 추가하는 것이다. 내용을 교체하는 것이 아니라 추가하는 것이라는 점에 주의하자. 만약 리모트 머신으로 접속하는 여러개의 로컬 머신이 있다면 각각의 로컬 머신의 id_ras.pub 파일을 authorized_keys에 추가해주면 된다.
1
|
cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys
|
메시지의 내용은 로컬 컴퓨터가 원격 컴퓨터를 식별할 수 없다는 의미이다. 새 호스트에 처음으로 접속하는 경우 발생한다. 'yes'와 엔터를 눌러 계속 진행한다.
Private 키에 passphrase를 지정해 주지 않았다면 곧바로 로그인이 된다. 만일 키 쌍을 만들 때 private 키에 passphrase를 지정해 주었다면 passphrase를 물어본다. 인증이 성공되면 쉘 세션이 열리게 된다.
DSA Key 인증 방식을 사용하는 경우 아래 내용을 참고
openssh는 7.1 버전 이상부터 기본적으로 DSA key가 허용되지 않습니다.
우선, DSA key가 제대로 동작하지 않는다면 설치된 openssh 버전을 확인해 봅니다.
lslpp -l |grep -i ssh (AIX)
rpm -qa |grep -i ssh (LINUX)
사용중인 버전이 7.1 이상이라면 DSA Key를 사용할 수 있도록 sshd_config 파일에 별도의 옵션을 추가하여야 한다.
DSA Key 허용옵션 추가하기
vi /etc/ssh/sshd_config
아래의 내용을 추가 하기
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
sshd daemon 재 시작하기
stopsrc -s sshd; startsrc -s sshd (AIX)
service sshd restart (LINUX 6버전 이하)
systemctl restart sshd (LINUX 7버전 이상)
sshd를 restart한 후 해당 서버에 DSA Key를 이용해 ssh접속을 시도하면 정상 적으로 접속 됨
출처 : 생활코딩 및 DSA Key 인증 가이드
'IT' 카테고리의 다른 글
2024 국가 사이버안보 기본계획 (3) | 2024.10.11 |
---|---|
금융보안원 금융보안관리사 시험 후기 (0) | 2024.08.06 |
[보도자료] 금융분야 클라우드 및 망분리 규제 개선방안 (1) | 2022.05.02 |
KVM(Kernel-based Virtual Machine)커널 기반 가상머신 (0) | 2022.03.03 |
[정보보호]Apache Log4j 보안 취약점 이슈 (0) | 2021.12.29 |