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