본문 바로가기
  • 실행력이 모든걸 결정한다
Linux

[Linux] SSH / rsync

by 김코더 김주역 2021. 4. 14.
반응형

1. SSH

secure shell, 서버에 원격 접속을 안전하게 할 수 있게 해주는 시스템

참고로, 원격 접속이 필요한 사물인터넷에 많이 이용된다. 

 

1) 동작 원리

다른 컴퓨터에 있는 리눅스 사용자의 계정에 원격 접속을 하기 위해서, 요청을 보내는 컴퓨터에는 SSH 클라이언트가 설치되어 있어야 하고, 요청을 받는 컴퓨터에는 SSH 서버가 실행되고 있어야 한다.

SSH 클라이언트가 원격 접속할 사용자명과 원격 접속할 서버의 ip주소를 가지고 요청하면, SSH 서버에서는 이 정보를 받아서 원격 접속을 허용한다.

 

2) 설치

(1) SSH 클라이언트 설치

sudo apt-get install openssh-client

 

(2) SSH 서버 설치

sudo apt-get install openssh-server

※ 처음부터 설치되어 있는 경우도 있다.

 

3) 원격 접속 요청

다른 컴퓨터로 원격 접속을 할 때는 ssh 클라이언트가 필수로 설치되어있어야 한다.
설치가 완료 되었다면 먼저 다음 명령어로 ssh를 실행한다. 당연히 요청을 받는 컴퓨터는 ssh가 실행중이어야 한다.

sudo service ssh start

 

요청을 보내는 명령어는 다음과 같다.

ssh [유저명]@[ssh 서버의 ip주소]

 

입력 후에 연결을 진행할 것인지 묻는 선택지가 나온다면 yes를 입력하고, 원격 접속할 사용자 계정의 비밀번호를 입력하라는 문구가 떴을 때 올바른 비밀번호를 입력해주면 원격 접속이 완료된다.

 

4) 접속 종료

exit

 

5) Port 번호

/etc/ssh/ 디렉토리의 sshd_config 파일에서 확인할 수 있으며, SSH의 기본 포트번호는 22번이다.

여러분들이 변경 가능하나, 접속 시 변경된 포트번호를 따라줘야 한다.

 

 

6) 비밀번호 없이 접속하기

내 컴퓨터의 ssh 공개키를 원격 사용자의 권한키에 추가해주면, 이후에는 비밀번호를 입력하지 않고도 원격 접속이 가능하다.

먼저, "ssh-keygen" 명령으로 ssh 공개키/비공개키를 생성한다. 중간에 path와 passphrase를 설정하라는 문구가 나오는데, 설정하지 않고 계속 Enter키를 눌러 진행해도 상관없다.

 

ssh-keygen 명령에 의해 ~/.ssh/ 경로에 id_rsa, id_rsa.pub 파일이 생성되었다.

두 파일명에 있는 rsa는 비대칭 암호화 방식중 하나이며, 공개키와 비공개키를 만들어 비공개키로 암호화를 하고 공개키로 복호화를 하는 원리이다. id_rsa파일에 ssh 비공개키가 있고, id_rsa.pub파일에 ssh 공개키가 있다.

그리고 authorized_keys는 모든 컴퓨터에 기본적으로 존재하는 파일이며, 이 파일에 권한키들이 있다.

 

마지막으로, 다음 명령어로 내 컴퓨터의 ssh 공개키를 원격지의 권한키에 추가하면 끝이다.

ssh-copy-id [유저명]@[ip주소]

※ 유저명, ip주소는 원격지 기준이다.

 

이제부터 원격지에서는 접속 요청이 들어오면 요청측으로 랜덤키를 전송하고, 요청측에서는 이 받은 랜덤키를 공개키를 이용하여 복호화 한다. 그리고 원격지에서도, 권한키에 설정된 요청측의 공개키를 이용하여 랜덤키를 복호화해보고 두 복호화 결과가 일치하면 최종적으로 로그인을 허용하게 된다.

 

 

2. rsync

remote sync의 줄임말

로컬 또는 원격간의 파일, 디렉토리를 동기화 해주는 유틸리티

내용이 다른 부분만 동기화를 해주기 때문에 성능이 좋다는 것이 장점이다.

 

1) 설치

다음 명령어로 rsync를 설치할 수 있다.

sudo apt-get install rsync

 

2) 사용법

rsync의 사용법은 이렇다.

rsync [옵션] [SRC] [DEST]

SRC, DEST에는 동기화할 파일 또는 디렉토리 경로가 들어간다. DEST에 Target Path가 들어가면 된다.

그리고 위 명령어는 SRC 경로에 해당하는 내용과 DEST 경로 아래에 해당하는 내용간에 동기화가 이루어진다.

그리고 가장 대표적인 옵션은 -a이다.

-a옵션은 -r, -l, -p, -t, -g, -o, -D옵션을 묶어놓은 옵션이며, 디렉토리 내의 모든 내용과 상세한 속성 정보까지 동기화 하겠다는 의미이다.

추가로 동기화 정보를 상세하게 출력해주는 -v옵션, 사람이 읽기 좋은 형식으로 출력해주는 -h옵션, 전송 진행 상황을 알려주는 -P옵션도 있다.

자주 쓰는 옵션들은 이정도로 소개하기로 하고, 나머지 옵션들은 여러분들이 각자 구글링이나 --help을 참고하여 따로 공부해보길 바란다.

 

3) 예제

(1) 사전 작업

des 디렉토리에 file3, file6을 생성했고, 각 내용은 "des file3", "des file6"이다.

그리고 src 디렉토리에는 file1~file5을 생성했고, 각 내용은 "src file1"~"src file5"이다.

이제 src에서 des방향으로 동기화를 시켜보자.

 

그러기 위해 다음 명령어를 입력했다. src폴더는 두고 그 아래에 있는 파일들만 이동할 것이므로, src가 아닌 src/를 썼다.

 

(2) 결과

des 내에 file1 ,file2 ,file4 ,file5가 추가되었다.

기존에 있던 file6는 그대로 남아있었다.

 

중요한 것은 file3의 내용이다.

분명 동기화 전에 두 디렉토리에는 서로 내용만 다른 file3 파일이 존재했다.

과연 file3의 내용은 "des file3"일까? 혹은 "src file3"일까?

 

결과를 보아하니, 두 디렉토리간에 제목이 같은 파일이 존재할 경우에는 그대로 덮어 씌워버린다는 사실을 알 수 있다.

 

4) 원격 rsync

rsync로 다른 리눅스 환경에 있는 파일 혹은 디렉토리와도 동기화할 수 있다.

이 경우에는 아래와 같이 작성한다. 유저명과 ip주소는 물론 원격지 기준이다. 

rsync [옵션] [SRC] [유저명]@[ip주소]:[DEST]

 

5) 비밀번호 없이 접속하기

1-6) 과정을 수행했다면 해당 작업은 필요 없다.

rsync는 SSH통신방식을 이용하기 때문이다.

 

 

반응형

댓글