LAB> 공개키를 이용한 자동 로그인하기


sshuser2 -> sshuser4 로 자동으로 로그인


-- 순서 -- 

1. ssh-agent 실행

2. 환경변수 세팅 (SSH_AUTH_SOCK, SSH_AGENT_PID)

3. ssh-add 실행

4. sshuser4 로 접속


1. ssh-agent 실행

A # su - sshuser2

sshuser2$ ssh-agent 

SSH_AUTH_SOCK=/tmp/ssh-XXYka13607/agent.13607; export SSH_AUTH_SOCK;

SSH_AGENT_PID=13608; export SSH_AGENT_PID;

echo Agent pid 13608;



sshuser2$ ps aux | grep ssh-agent

sshuser2 13608  0.0  0.2   6748   636 ?        Ss   11:22   0:00 ssh-agent

sshuser2 13610  0.0  0.2   4020   672 pts/0    R+   11:22   0:00 grep ssh-agent



sshuser2$ ls -ld /tmp/ssh-XXYka13607/

drwx------ 2 sshuser2 sshuser2 4096 Apr 16 11:22 /tmp/ssh-XXYka13607//

sshuser2$ ls -ld /tmp/ssh-XXYka13607/agent.13607 

srw------- 1 sshuser2 sshuser2 0 Apr 16 11:22 /tmp/ssh-XXYka13607/agent.13607=



2. 환경변수 세팅 (SSH_AUTH_SOCK, SSH_AGENT_PID)

(아까 ssh-agent 했을때 출력된 메시지를 복사해서 붙여넣기 하면 된다.)

sshuser2$ SSH_AUTH_SOCK=/tmp/ssh-XXYka13607/agent.13607; export SSH_AUTH_SOCK;

sshuser2$ SSH_AGENT_PID=13608; export SSH_AGENT_PID;


3. ssh-add 실행

sshuser2$ ssh-add

Enter passphrase for /home/sshuser2/.ssh/id_rsa: 

Identity added: /home/sshuser2/.ssh/id_rsa (/home/sshuser2/.ssh/id_rsa)



4. sshuser4 로 접속

sshuser2$ ssh sshuser4@192.168.56.103

Last login: Wed Apr 16 11:21:41 2014 from 192.168.56.102

sshuser4$  <-- 자동으로 로그인



========================================================




========================================================

LAB> 아래 조건을 이용해서 ssh-agent를 이용해서 자동 

     로그인을 세팅하시오.

==> 해보길..

sshuser3 -> sshuser1 로 자동으로 로그인을 세팅하시오.

sshuser4 -> sshuser2 로 자동으로 로그인을 세팅하시오.


-- 순서 -- 

1. ssh-agent 실행

2. 환경변수 세팅 (SSH_AUTH_SOCK, SSH_AGENT_PID)

3. ssh-add 실행

4. sshuser3 로 접속


- sshuser3 -> sshuser1 로 자동으로 로그인

sshuser3$ ssh-agent 

SSH_AUTH_SOCK=/tmp/ssh-UYwyu30092/agent.30092; export SSH_AUTH_SOCK;

SSH_AGENT_PID=30093; export SSH_AGENT_PID;

echo Agent pid 30093;


- 환경변수 세팅

sshuser3$ SSH_AUTH_SOCK=/tmp/ssh-UYwyu30092/agent.30092 

sshuser3$ SSH_AGENT_PID=30093

sshuser3$ export SSH_AUTH_SOCK SSH_AGENT_PID


- 확인

sshuser3$ ps aux | grep ssh-agent

sshuser3$ set | grep SSH


- ssh-add 실행

sshuser3$ ssh-add


- 접속

sshuser3$ ssh sshuser1@192.168.56.102

Last login: Wed Apr 16 11:14:43 2014 from 192.168.56.103

sshuser1$ 



- sshuser4 -> sshuser2 로 자동으로 로그인


sshuser4$ ssh-agent 

sshuser4$ SSH_AUTH_SOCK=/tmp/ssh-eebCw30181/agent.30181

sshuser4$ SSH_AGENT_PID=30182

sshuser4$ export SSH_AUTH_SOCK SSH_AGENT_PID

sshuser4$ ssh-add

sshuser4$ ssh sshuser2@192.168.56.102

Last login: Wed Apr 16 11:17:35 2014 from 192.168.56.103

sshuser2$ 


========================================================


========================================================

LAB> 사용자가 로그아웃하면 다시 다른 서버의 사용자로

로그인 시도시 공개키 비번을 물어보지 않게 세팅하자.


sshuser4 -> sshuser2 


# su - sshuser4

sshuser4$ vi .bash_profile

-- .bash_profile --

  :

SSH_AUTH_SOCK=/tmp/ssh-eebCw30181/agent.30181

SSH_AGENT_PID=30182

export SSH_AUTH_SOCK SSH_AGENT_PID 

-- .bash_profile --


이제 로그인 할 때 환경 변수에 자동 등록된다.


sshuser4$ exit


# su - sshuser4

(이때 다시 환경 변수에 자동 등록되어서 자동 로그인이 가능해 진다.)


sshuser4$ ssh sshuser2@192.168.56.102  <-- 자동로그인

sshuser2$


하지만 재부팅하면 ssh-agent 프로세스가 죽기 때문에 다시


ssh-agent와 새로운 ssh-agent pid 환경 변수 등록. ssh-add까지 다시 등록해주어야한다.

========================================================

==>여기까지 해보길




========================================================

LAB> rsync over ssh + ssh-agent 를 이용해서 자동으로 백업을 받아보자.


A (data server): 192.168.56.102

B (backup server): 192.168.56.103


A +----  B (backup server)

  |

  |

  +----> 



-- 순서 --

1. 공개키 생성 (ssh-keygen)

2. 공개키를 A 서버에 복사 및 접속테스트 

3. ssh-agent 를 실행

4. ssh-add 를 실행

5. rsync 이용해서 백업 받는다.

6. root 접속을 막고 rsync만 이용한다.


1. 공개키 생성 (ssh-keygen)

backup# 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:  <-- 비번 입력

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

ea:62:e0:ff:a4:6a:3e:3e:db:12:c5:11:0a:1d:75:de root@localhost.localdomain



2. 공개키를 A 서버에 복사 및 접속테스트 

backup# scp .ssh/id_rsa.pub 192.168.56.102:.ssh/authorized_keys


backup# ssh 192.168.56.102

Enter passphrase for key '/root/.ssh/id_rsa': 

Last login: Wed Apr 16 10:26:53 2014 from 192.168.56.1

data# exit



3. ssh-agent 를 실행

backup# ssh-agent > ssh-agent.sh

backup# . ssh-agent.sh 



4. ssh-add 를 실행

backup# ssh-add

Enter passphrase for /root/.ssh/id_rsa:   <-- 비번입력

Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)



5. rsync 이용해서 백업 받는다.

backup# rsync -az -e ssh 192.168.56.102:/etc /backup



6. root 접속을 막고 rsync만 이용한다.

- ssh 설정파일에서 forced-commands-only 옵션은 

  특정명령어만 실행할 수 있는 옵션이다.


data# vi /etc/ssh/sshd_config


-- /etc/ssh/sshd_config --

PermitRootLogin forced-commands-only

-- /etc/ssh/sshd_config --


검색은 <ESC> 누르고 /(검색할단어)

여기서는 <ESC> /PermitRootLogin (엔터)

아래와 같이 수정


(위 처럼 설정하면 xshell 같은 툴로 root로 접속 불가. 일반 유저 접속 -> su - root로 전환 가능)



data# /etc/init.d/sshd restart


data# vi .ssh/authorized_keys



from="192.168.56.103",command="/root/bin/validate-rsync"  <==추가



data# cd ~/bin

data# install /dev/null validate-rsync

data# vi validate-rsync



-- validate-rsync --

#!/bin/sh 


echo $SSH_ORIGINAL_COMMAND


case "$SSH_ORIGINAL_COMMAND" in 


  *\&*) echo "Rejected" ;; 

  *\(*) echo "Rejected" ;; 

  *\{*) echo "Rejected" ;; 

  *\;*) echo "Rejected" ;; 

  *\<*) echo "Rejected" ;; 

  *\`*) echo "Rejected" ;; 

  rsync\ --server*) $SSH_ORIGINAL_COMMAND ;; 

  *) echo "Rejected" ;; 

esac 

-- validate-rsync --


data# service sshd restart



- 그러면 backup 서버에서 data 서버로 접근을 할 수 있다. 

backup# rsync -avz -e ssh 192.168.56.102:/home /backup