공개 키 기반 인증 설정
Server-A <----------> Client-Linux
(SSH Server) (Client-Linux)
- 패스워드 인증 방식은 악의적으로 패스워드를 알아낸 경우 서버 접속을 막을 수 없다.
- 공개 키 기반인증은 서버에 계정이 있는 클라이언트가 공개키와 개인키를 생성해서 공개키를 서버에 저장하고
개인키는 자신의 컴퓨터에 보관해 이 두개의 키를 이용해 인증에 사용한다.
Server-A
#yum -y install openssh openssh-server openssh-clients openssh-askpass
Client-Linux
#yum -y install openssh-clients //클라이언트 패키지 설치
#useradd ssh-user1 //계정 생성
#passwd ssh-user1 //패스워드 지정 설정
$su - ssh-user1
- 공개 키/ 개인 키 생성 (-t 암호화 알고리즘 지정)
$ssh-keygen -t rsa
Enter file in which to save the key (/home/ssh-user1/.ssh/id_rsa): 키 생성 경로 정해주기 (Enter)
Enter passphrase (empty for no passphrase): 공개키 인증 값 (암호) 123123
Enter same passphrase again: 암호 재 입력
- 개인 키에 사용할 패스워드 지정, 입력하지 않을 경우 접속시 개인 키 암호를 물어보지 않는다.
- 암호를 설정하지 않으면 개인키가 노출되었을 경우 공개 키를 이용한 인증도 무력화 된다.
Your identification has been saved in /home/ssh-user1/.ssh/id_rsa.
Your public key has been saved in /home/ssh-user1/.ssh/id_rsa.pub.
- 일련의 완료 문구 (공개키와 개인키가 만들어 졌다)
$ll /home/ssh-user1/.ssh
[ssh-user1@Clinet-Linux ~]$ ll /home/ssh-user1/.ssh
합계 8
-rw-------. 1 ssh-user1 ssh-user1 1743 2017-01-18 19:30 id_rsa //개인키 600
-rw-r--r--. 1 ssh-user1 ssh-user1 404 2017-01-18 19:30 id_rsa.pub //공개키 644
$cat /home/ssh-user1/.ssh/id_rsa.pub
암호화된 키값 ssh-user1@Client-Linux
Server-A
$useradd ssh-user1
$passwd ssh-user1
Client-Linux
$ssh-copy-id ssh-user1@100.100.100.110
- ssh-copy-id를 이용해 공개 키를 ssh서버의 사용자 ssh-user1를 지정해 복사하면 /home/ssh-user1/.ssh/authorized_keys란 이름으로 복사된다.
- scp /home/ssh-user1/.ssh/id_rsa.pub ssh-user1@100.100.100.110:~/.ssh/authorized_keys 라고 해야하는 것을
$ssh-copy-id ssh-user1@100.100.100.110로 쓴다
Server-A
#su - ssh-user1
$pwd
/home/ssh-user1/
$cd /home/ssh-user1/.ssh // ssh-user1의 .ssh 디렉토리로 이동
$ls // 목록 출력
authorized_keys // 공개 키 복사 확인
/home/ssh-user1/.ssh/authorized_keys 와 /home/ssh-user1/.ssh 값이 같다.
Server-A
#vi /etc/ssh/sshd_config // ssh서버 설정 파일
48 #PubkeyAuthentication yes -> 48 PubkeyAuthentication yes
- 공개키 인증을 허용하는 옵션(yes)
49 #AuthorizedKeysFile .ssh/authorized_keys -> AuthorizedKeysFile .ssh/authorized_keys
- ssh 클라이언트가 서버의 계정에 공개키를 저장할때 그 디렉토리와 키의 이름을 지정한다.
66 PasswordAuthentication yes -> 66 PasswordAuthentication no
- 공개 키 기반 인증을 위해 패스워드 인증 설정은 no로 변경
#service ssh restart
Client-Linux
#su - ssh-user1 //스위칭
$ssh ssh-user1@100.100.100.110 //서버A 접속
Enter passphrase for key '/home/ssh-user1/.ssh/id_rsa': (개인키암호입력) 123123
[ssh-user1@Server-A ~]$ 접속 완료
SSH-AGENT, SSH-ADD를 사용한 자동 인증
- 개인 키 암호를 메모리에 저장해서 재 접속 시 패스워드 입력없이 접속 하도록 도와주는 프로그램
ssh-agent - 개인 키의 패스워드를 보관하기 위해 사용되는 백그라운드 프로그램
ssh-add - 실행되고 있는 ssh-agent에 키를 추가하기 위해 사용되는 프로그램
Client-Linux (ssh-user1)
$eval $(ssh-agent)
Agent pid 2536
- 명령어 eval이 shell에게 ssh-agent의 출력을 쉘명령어로서 실행하라고 전달하면 ssh-agent는 개인키의 패스워드를
보관하기 위해 메모리에 백그라운드 프로세스로 존재
$ssh-add
Enter passphrase for /home/ssh-user1/.ssh/id_rsa:
Identity added: /home/ssh-user1/.ssh/id_rsa (/home/ssh-user1/.ssh/id_rsa)
- 명령어 ssh-add를 이용하여 개인 키 패스워드를 ssh-add에 추가
$ssh-add -l
2048 7d:72:61:88:f6:48:dc:d7:65:4c:f6:88:a8:9c:59:e1 /home/ssh-user1/.ssh/id_rsa (RSA)
- 목록을 확인하기 위해 명령어 ssh-add -l을 사용하면 ssh-agent가 현재 보관중인 키의 지문 (fingerprint)을 알 수 있다.
$ ssh ssh-user1@100.100.100.110
Last login: Tue Jan 17 23:07:07 2017 from 100.100.100.130
- 패스워드를 묻지 않고 접속됨
Server-A (root)
# vi /etc/ssh/sshd_config
13 Port 22
- SSH서버의 포트를 변경하기 위해 사용하는 옵션
- 포트를 변경함으로써 무작위로 22번 포트를 공격하는 Brute-force공격이나 nmap과 같은 스캐닝 툴로부터 방어하기 위해 사용할 수 있다.
15 ListenAddress 0.0.0.0
- 서버에 네트워크 인터페이스가 하나 이상일때 (ip주소가 1개 이상일때) SSH 서버스를 제공할 IP를 지정
21 Protocol 2
- SSHv1은 이미 중간자 공격 (Man in the Middle Attack)에 노출됐으므로 SSHv1은 사용하지 않고 SSHv2만 사용하게 설정한다.
42 PermitRootLogin yes
- SSH서버는 기본적으로 root 계정 접속을 허용하고 있는데 이것을 금지하고 일반 사용자로만 접속하게 설정하는 것이 좋다.
56 HostbasedAuthentication no
- 이미 취약점이 많이 발견된 오래된 인증 방식으로 사용하지 않음
65 PermitEmptyPasswords no
66 PasswordAuthentication no
119 ClientAliveInterval 0
- 일정한 시간 동안 클라이언트로부터 데이터 전송이 없는 경우 초 단위로 세션을 끊기 위해 사용
120 ClientAliveCountMax 3
- ClientAliveInterval 설정된 시간이 지났을때 몇번 재시도 할지 설정하기 위해 사용
ex) ClientAliveInterval 100 ClientAliveCountMax 3 ---> 100초 * 3번 = 300초 동안 응답이 없으면 세션 연결 해제
126 #ChrootDirectory none -> ChrootDirectory /home/u%
- 접속하는 사용자의 접근 가능한 최종 디렉토리를 자신의 홈디렉토리 제한 하는 설정
디버깅 모드 (ssh 동작할때 클라이어느와 서버가 통신하는 과정 확인 가능)
#ssh -v // 동작과정 출력
#ssh -vv // 더 자세하게 동작과정 출력
#ssh -vvv // 더더 자세하게 동작과정 출력
'Linux' 카테고리의 다른 글
Day-30 DHCP (0) | 2017.01.23 |
---|---|
Day-29 DHCP (0) | 2017.01.22 |
Day-27 SSH (0) | 2017.01.19 |
Day-26 NTP (0) | 2017.01.19 |
Day-25 Telnet, VNC, SSH (0) | 2017.01.18 |