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 |