본문 바로가기

Linux/기타

공개키 인증방식으로 접속

ssh 로 로그인하기 위해서는 아래 2가지 인증방식을 제공한다.
1. id/pw 인증방식 
2. 공개키 인증방식 (보안상 id/pw 보다 더 안전하다)

===================================================================
OPENSSH-LAB> 공개키 인증방식 (암호가 없는) 으로 접속을 해보자.

-- 순서 --
1. 키 생성
- 키(개인키/공개키)를 생성한다.
2. 공개키 복사 
- 생성된 공개키를 서버에 저장한다. (authorized_keys)
3. 서버 접속 
- 서버에 로그인한다.
4. 자동 접속 
-- 순서 --

+--------+      +--------+
|        |      |        |
| Client | ---> | Server |
|        |      |        |
+--------+      +--------+
  root     --->  user : sshuser
                 port : 22
                 public key : /home/sshuser/.ssh/authorized_keys

o server 측 설정
- 공개키 에러 발생시 rm -f .ssh/known_hosts 를 지우고 접속한다.
server # useradd sshuser
server # echo 1234 | passwd --stdin sshuser
server # ssh sshuser@localhost
    <-- yes
    <-- 1234
server $ ssh localhost  <-- .ssh 디렉토리를 생성
    <-- yes

^c  <-- Ctrl + C 를 입력해서 종료한다.
server $ exit


o client 측 설정

1. 키 생성
- 암호문이 없는 공개키를 생성한다.
client # ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  <-- 엔터
Enter passphrase (empty for no passphrase): <-- 암호문 입력에서 엔터
Enter same passphrase again: <-- 암호문 입력에서 엔터
# ls .ssh/
id_rsa  id_rsa.pub  known_hosts

2. 공개키 복사 
- 생성된 공개키를 server의 sshuser 사용자로 복사한다.
# scp .ssh/id_rsa.pub sshuser@server:.ssh/authorized_keys
    <-- 비밀번호를 물어본다(shadow 비번)

3. 서버 접속 
- 접속 (공개키가 있고 암호문이 없으므로 자동 로그인된다.)
# ssh sshuser@localhost
Last login: Wed Apr 16 20:55:34 2014 from localhost.localdomain
$

4. 자동 접속 
- 공개키 기반의 로그인은 암호가 막혀있어도 로그인할 수 있다는 특징이 있다.
- 그러므로 만약 서버에서 사용자들을 막을때는 반드시 공개키가 존재하는지
  확인해야 한다. 
server# passwd -l sshuser
server# grep --color sshuser /etc/shadow
sshuser:!!$1$3Z0ljcUr$JHD6qUH61kQa9DsqI7P491:16521:0:99999:7:::
        ~~
client# ssh sshuser@localhost
Last login: Fri Mar 27 17:59:11 2015 from 127.0.0.1
server$
===================================================================


=================================================================== OPENSSH-LAB> 공개키 인증방식 (암호가 있는) 으로 접속을 해보자. -- 순서 -- 1. 공개키 생성 2. 공개키 복사 3. 서버 접속 4. 자동 접속 -- 순서 -- 1. 공개키 생성 - 새로운 공개키를 생성한다. client# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): <-- 암호문 입력 Enter same passphrase again: <-- 암호문 입력 2. 공개키 복사 - 서버에 공개키를 복사한다. client# scp .ssh/id_rsa.pub sshuser@localhost:.ssh/authorized_keys sshuser@localhost's password: <-- password 입력 3. 서버 접속 - 서버에 공개키가 있고 암호문이 있을때 암호문을 입력해서 로그인한다. - 여기서 그럼 공개키의 암호문이 있을때와 없을때의 차이는 무엇인가?? client# ssh sshuser@localhost Enter passphrase for key '/root/.ssh/id_rsa': <-- 암호문 입력 server$ 4. 자동 접속 - 서버에 공개키가 있을때 자동으로 로그인을 세팅한다. ==> 사용자가 암호문을 직접 입력하는 것이 아닌 client# ssh-agent                                        ssh-agent가 대신 수행하여 자동으로 로그인이된다. SSH_AUTH_SOCK=/tmp/ssh-0F7lVMCjbv55/agent.3933; export SSH_AUTH_SOCK; SSH_AGENT_PID=3934; export SSH_AGENT_PID; echo Agent pid 3934; - ssh-agent 환경변수 세팅 client# SSH_AUTH_SOCK=/tmp/ssh-0F7lVMCjbv55/agent.3933; ==> ssh-agent의 소켓파일을 변수로 선언하고 client# SSH_AGENT_PID=3934                               ==> 프로세스 번호도 변수로 선언한 뒤       client# export SSH_AUTH_SOCK SSH_AGENT_PID;              ==> 환경변수로 선언해준다. - ssh-add 로 암호문 입력 client# ssh-add Enter passphrase for /root/.ssh/id_rsa: Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) client# ssh sshuser@localhost Last login: Wed Apr 16 23:00:40 2014 from localhost.localdomain server$ exit ==> 암호문 입력 없이 자동으로 로그인이 되는 것을 확인할 수 있다. - 삭제 (ssh-add) ==> 암호문을 삭제하게 되면 자동으로 로그인을 할 수 없다. server# ssh-add -D All identities removed. - 삭제 (ssh-agent) server# ssh-agent -k =>ssh-agent 프로세스 종료, /tmp 디렉토리의 ssh-agent 관련 소켓파일 삭제, ssh-agent의 환경변수 자동삭제 server# unset SSH_AUTH_SOCK SSH_AGENT_PID win(xshell) -> server(client) ---> localhost(server)


!!!!! 암호문이 있을 때 개인키를 누군가가 탈취 하더라도 암호문을 알지 못한다면 접속을 할 수 없다. !!!!! ===================================================================



'Linux > 기타' 카테고리의 다른 글

chroot환경의_OpenSSH설치하기  (0) 2015.06.17
rsync + ssh + 공개키 + crond 를 이용한 백업시스템 구축하기  (0) 2015.06.17
ssh란?  (0) 2015.06.17
scp 사용하기  (0) 2015.06.16
Xshell, ftp, editplus를 이용한 업로드하기  (0) 2015.06.16