더북(TheBook)

ssh 활용하기

호스트에서 SSH 서버로 접속해봅시다.

SSH 클라이언트 프로그램인 ssh는 우분투 리눅스에 기본적으로 설치되어 있습니다. ssh [사용자 계정]@[서버 주소] 또는 ssh -l [사용자 계정] [서버 주소] 형식으로 사용합니다.

접속 대상이 처음 접속하는 서버인 경우 접속을 진행할지 묻습니다. yes를 입력하고 접속하려는 사용자 계정의 패스워드 password를 입력합니다. 명령 프롬프트가 바뀐 것으로 SSH 서버인 server01에 접속한 사실을 알 수 있습니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201
The authenticity of host '192.168.122.201 (192.168.122.201)' can't be
established.
ECDSA key fingerprint is
d9:ca:30:2b:6c:80:7a:41:ac:07:7e:ec:f2:ec:af:57.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.201' (ECDSA) to the list of
known hosts.
administrator@192.168.122.201's password: ********
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic i686)
...
Last login: Mon Oct 27 21:58:26 2014
administrator@server01:~$
이렇게 하세요!

SSH 서버는 접속을 시도하는 호스트의 키 지문(key fingerprint)을 저장합니다. 기본적으로 ECDSA 방식의 암호화 기술을 사용하기 때문에 호스트 공개키는 /etc/ssh/ssh_host_ecdsa_key.pub에 저장됩니다. ssh-keygen 명령으로 호스트 키 지문을 확인할 수 있습니다.

administrator@server001:~$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 d9:ca:30:2b:6c:80:7a:41:ac:07:7e:ec:f2:ec:af:57 root@server01 (ECDSA)

접속이 이루어진 다음 SSH 서버에서 lsof 명령을 실행해서 네트워크 연결 여부를 살펴봅시다. SSH 서버 192.168.122.201:22와 SSH 클라이언트 losttemple(192.168.122.1):41561(임의의 포트 번호) 사이에 연결(ESTABLISHED) 상태를 확인할 수 있습니다.

administrator@server01:~$ sudo lsof -i
COMMAND  PID         USER      FD  TYPE  DEVICE  SIZE/OFF  NODE NAME
sshd   2134          root      3u  IPv4  13548   0t0 TCP   192.168.122.201:ssh->losttemple:41561 (ESTABLISHED)
sshd   2182 administrator      3u  IPv4  13548   0t0 TCP   192.168.122.201:ssh->losttemple:41561 (ESTABLISHED)
sshd   2655          root      3u  IPv4  14499   0t0 TCP   *:ssh (LISTEN)
sshd   2655          root      4u  IPv6  14501   0t0 TCP   *:ssh (LISTEN)

텔넷과 마찬가지로 SSH 세션을 중단하려면 exit 명령을 내립니다. 프롬프트의 호스트 이름도 원래대로 돌아옵니다.

administrator@server01:~$ exit
logout
Connection to server01 closed.
shinjaehun@losttemple:~$
이렇게 하세요!

‘SSH 서버 설치하기’에서 살펴봤듯이 어떤 이유로 sshd가 기본 포트 번호인 22가 아닌 다른 포트에서 운영될 수 있습니다. 이럴 때는 접속하는 쪽에서 해당 포트로 접속 요청을 해야 하는데 -p 옵션을 사용합니다. sshd가 1022 포트에서 접속 요청을 기다리고 있으면 다음과 같이 ssh로 접속합니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201 -p 1022

ssh로 원격에서 수행할 명령을 바로 입력할 수도 있습니다. ssh [사용자 계정]@[서버 주소] [서버에서 수행할 명령] 형식으로 입력합니다. 다음 명령을 실행하면 server01에 접속하여 하드디스크 상태를 보여주는 df -h 명령을 실행하고 다시 원래 호스트로 돌아옵니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201 df -h
administrator@192.168.122.201's password: ********
Filesystem  Size   Used  Avail Use%   Mounted on
/dev/vda2   7.9G  1014M   6.5G   14%  /
none        4.0K      0   4.0K    0%  /sys/fs/cgroup
udev        492M          4.0K  492M  1%  /dev
tmpfs       101M          336K  100M  1%  /run
none        5.0M      0   5.0M    0%  /run/lock
none        501M      0   501M    0%  /run/shm
none        100M      0   100M    0%  /run/user

scp는 ssh를 통해 원격으로 파일을 복사하는 명령입니다. scp [원본 파일 경로] [복사할 파일 경로] 형태로 입력합니다. 원본이나 복사할 파일의 원격 시스템 경로는 [사용자 계정]@[서버 주소]:[파일 경로]가 되어야 합니다. 다음 명령을 실행하면 현재 디렉터리에 있는 ‘test_ssh_client’ 파일을 server01으로 전송하고 /tmp 디렉터리로 복사할 것입니다.

shinjaehun@losttemple:~$ touch test_ssh_client
shinjaehun@losttemple:~$ scp test_ssh_client administrator@192.168.122.201:/tmp/
administrator@server01's password: ********
test_ssh_client                            100%   17    0.0KB/s    00:00

파일이 제대로 복사되었는지 server01의 /tmp 디렉터리에서 확인합니다.

administrator@server01:~$ ls /tmp
test_ssh_client

이번에는 SSH 서버에 존재하는 파일을 현재 디렉터리로 복사해봅시다. 테스트를 위해 SSH 서버에 ‘test_ssh_server’ 파일을 생성합니다.

administrator@server01:~$ touch test_ssh_server

다음 명령은 server01의 홈 디렉터리에 있는 ‘test_ssh_server’ 파일을 현재 디렉터리(.)로 복사할 것입니다. 파일을 제대로 복사해왔는지 확인합니다.

shinjaehun@losttemple:~$ scp administrator@192.168.122.201:test_ssh_server .
administrator@server01's password: ********
test_ssh_server                             100%   13    0.0KB/s    00:00
shinjaehun@losttemple:~$ ls
test_ssh_server
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.