더북(TheBook)

ssh-agent를 이용해서 여러 SSH 서버 접속하기

ssh-agent를 이용해서 여러 SSH 서버를 경유해서 접속해봅시다. 호스트에서 server01을 거쳐 server02에 접속해보겠습니다. 이를 위해 server02에도 SSH 서버를 설치해야 하며 개인키도 전송해둬야 합니다.

그림 6-9 여러 SSH 서버 접속

virt-clone을 이용해서 실습에 사용할 게스트 server02를 생성합니다. 생성이 끝나면 server02를 시작해서 로그인하고, 5장의 ‘실습에 사용할 게스트 준비하기’를 참고하여 네트워크 환경을 설정합니다.

shinjaehun@losttemple:~$ sudo virt-clone --original guest \
> --name server02 \
> --file /home/shinjaehun/virtual_machines/server02.img
Tip

IP 주소는 192.168.122.202, 호스트 이름은 server02로 설정합니다.

server02에도 SSH 서버를 설치해둡니다.

administrator@server02:~$ sudo apt-get update
administrator@server02:~$ sudo apt-get install openssh-server

호스트의 공개키를 SSH 서버인 server02(192.168.122.202)로 전송합니다.

shinjaehun@losttemple:~/.ssh$ ssh-copy-id administrator@192.168.122.202
...
administrator@192.168.122.202's password: ********

패스워드 인증 대신 server02의 공개키 인증을 활성화시켜야 합니다. server02에 로그인해서 SSH 서버 설정 파일 /etc/ssh/sshd_config를 수정하고 저장합니다.

PubkeyAuthentication yes
#AuthorizedKeysFile      %h/.ssh/authorized_keys
PasswordAuthentication no
Tip

SSH 서버의 보안을 위해 ‘SSH 서버 설치하기’를 참고하여 필요한 옵션을 수정합니다.

SSH 서버를 다시 시작해서 변경한 설정 내용을 반영합니다.

administrator@server02:~$ sudo service ssh restart

호스트에서 server02로 접속 가능 여부를 테스트해봅니다. 앞에서 패스구문을 한 번 입력했기 때문에 다시 입력하지 않아도 바로 접속될 수도 있습니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.202

하지만, 호스트에서 server01에 접속한 다음 바로 server02로 접속하려니 접속이 제한됩니다. 앞서 언급했듯이 server01에는 개인키가 존재하지 않기 때문입니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201
administrator@server01:~$ ssh administrator@192.168.122.202
Permission denied (publickey).

ssh-agent를 사용할 차례입니다. 여기에서는 ssh-agent를 직접 제어하는 대신 로그인 세션 동안 ssh-agent가 유지되도록 관리하는 도구인 keychain을 이용해서 개인키를 ssh-agent에 등록해서 사용합니다.

shinjaehun@losttemple:~$ sudo apt-get install keychain

ssh-add로 개인키를 ssh-agent에 등록합니다. 개인키에 패스구문이 설정되어 있다면 이 과정에서 입력해야 합니다.

shinjaehun@losttemple:~$ keychain ~/.ssh/id_rsa

* keychain 2.7.1 ~ http://www.funtoo.org
* Starting ssh-agent...
* Adding 1 ssh key(s): /home/shinjaehun/.ssh/id_rsa
Enter passphrase for /home/shinjaehun/.ssh/id_rsa: ********
* ssh-add: Identities added: /home/shinjaehun/.ssh/id_rsa

이제 에이전트에 등록되어 있는 개인키를 사용할 수 있는 상태입니다. ssh로 server01에 연결된 상태에서 server02로 바로 접속이 될 것입니다. ssh 연결 과정에서 -A 옵션을 추가했는데 이렇게 해야 ssh가 에이전트를 포워딩합니다. 호스트의 개인키를 server01과 server02에 전달해줄 것입니다.

shinjaehun@losttemple:~$ ssh -A administrator@192.168.122.201
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic i686)
...
administrator@server01:~$ ssh -A administrator@192.168.122.202
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic i686)
...
administrator@server02:~$
Tip

만일 -A 옵션 없이 server01을 거쳐 server02로 연결을 시도하면 실패할 것입니다. 호스트의 개인키가 전달되지 않기 때문입니다.

에이전트를 포워딩해서 마치 로컬 시스템에서 파일을 옮기듯 다음과 같이 네트워크를 거쳐 파일을 전달할 수 있습니다. 다음 명령은 server01(192.168.122.201) 홈 디렉터리에 존재하는 ‘test_ssh_forward’ 파일을 server02(192.168.122.202)의 /tmp 디렉터리로 복사할 것입니다. 유감스럽게도 scp에는 -A 같은 옵션이 없기 때문에 포워딩 옵션을 -o ForwardAgent=yes로 입력해야 합니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201 "touch test_ssh_forward"
shinjaehun@losttemple:~$ scp -o ForwardAgent=yes administrator@192.168.122.201:test_ssh_forward administrator@192.168.122.202:/tmp/
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.