리눅스 - ssh key

김민재·2021년 7월 22일
0

Gotcha Linux!

목록 보기
22/22

ssh public private key

ssh 공개키 비공개키를 이용한 로그인 방

컴퓨터 두 대 컴퓨터, 한대는 이름이 리눅스1 이고요, 또 한대는 이름이 리눅스2 입니다.
그리고 리눅스 1의 아이피는 ip addr는 192.168.0.65, 리눅스2의 ip addr는 192.168.0.67로 서로 ip가 다르다.

리눅스 1 컴퓨터로 리눅스2에 로그인 하기 위해서 ssh egoing@192.168.0.67를 치고 패스워드를 입력하면 리눅스2에 로그인이 패스워드 입력하지 않으면서도 훨씬 더 안전한 방식으로 로그인 하는 방법이 있다.

먼자 ssh 공개키, 비공개키라는 것을 일단 만들어야 한다. 그 때 사용하는 명령이 ssh-keygen 즉, key 열쇠와 gen은 generation 생성한다하여 열쇠를 생성하는 명령어이다.

엔터를 치면 홈 디렉터리입니다 밑에 숨긴 디렉터리인 ssh라는 디렉터리 밑에 id_rsa 라고 하는 파일을 생성하겠다는 메세지가 나온다.

cd .ssh에 들어가 보면 중요한 두 개의 파일이있다. id_rsa와 id_rsa.pub 파일이다
pub는 public의 약자에요
즉, id_rsa 파일은 ssh private key라고 부르고요 뒤에 pub가 붙어 있는 파일은
ssh public key라고 부른다.
따라서 id_rsa 파일은 절대로 누군가에게 노출되면 안되 밑에 있는 파일은 노출이 되도 괜찮다.

id_rsa 파일은 노출되면 절대로 안되기 때문에 퍼미션이 소유자만 read, write가 가능하게 되어 있고 pub파일은 소유자가 아닌 사람도 read를 할 수 있다.
또 현재 디렉터리의 권한이 소유자에 대해서만 읽고, 쓰고, 실행이 가능하다. 디렉토리에 대해서 읽고, 쓰고, 실행하는것이 불가능하면 그 디렉터리에 누군가가 들어올 수 없음을 의미하고 디렉터리에 어떤 파일들이 들어있는지 역시 알 수 없음을 의미한다. 따라서 현재의 사용자가 아닌 사람은 .ssh 라는 디렉터리에 접근 할 수가 없게 된다.

여러분이 로그인하고자 하는 컴퓨터에 여기 있는 공개키를 저장을 시키면
공개키가 저장되어있는 컴퓨터에 로그인 없이 로그인을 할 수가 있게 된다.

리눅스2 라는 컴퓨터 홈 디렉터리 .ssh라는 디렉터리로 들어가서 보면 중요한 파일 authorized_keys 가 존재한다. authorized 라고 하는것은 인증된이라는 뜻이다.

authorized_keys라는 파일 끝에다 id_rsa.pub 퍼블릭키를 붙여 주시면 됩니다
그걸 하는 과정에서 실수가 일어나기가 쉽기 때문에 유틸리티를 활용하면 간편한데 ssh-copy-id 여기 있는 퍼블리키를 로그인하고 싶어하는 컴퓨터의 authorized_keys 파일 끝에다가 붙여주는 프로그램이다.

ssh-copy-id egoing@192.168.0.67 로그인하고자는 컴퓨터, 리눅스2를 적고 엔터를 치면
리눅스2를 패스워드를 물어보고 입력하면 된다.

이로인해 리눅스1에 들어 있었던 id_rsa.pub 의 내용이 리눅스 2의 authorized_keys에 저장이 된다. 이를 마치면 ssh egoing@192.168.0.67를 입력하면 로그인 없이 로그인이 된다.

< 정리 >
1. ssh keygen으로 공개키와 비공개키를 만든다.
2. 그 다음에 공개키를 로그인 하고자 하는 컴퓨터의 authorized_keys에 추가해야되는데 그 때, 간편하게 할 수 있는 방법이 ssh-copy-id 뒤에 로그인 하고자하는 컴퓨터의 id@ip를 적어주면 로그인 하고자 하는 컴퓨터에 .ssh 디렉터리에 있는 authorized_keys에 public key가 추가가된다.
3. 이는 private 키를 가지고 있는 리눅스1 컴퓨터가 리눅스 2컴퓨터에 로그인 하는것을 허용한다 라는 의미를 갖는다.

Loginless 2 : rsync

rsync는 컴퓨터와 컴퓨터 사이에 파일을 동기화이다.
rsync를 하기 위해선 로그인이 기본적으로 필요한데 'SSH Public Key' 와 'Private Key' 를 이용해서 자동으로 로그인을 하게되면 로그인 없이 동기화를 할 수가 있가 있게된다.


rsync3디렉토리를 만들고 touch test {1..100}로 100개의 빈 파일이 생성한다.
linux2에 home 디렉토리에 rsync_welcome 디렉토리를 만들고 저 디렉토리에 동기화를 시킨다.

linux1에다가 rsync -avz 'egoing@192.168.0.67:~/rsync_welcome', z 압축 v 는 출력해해서 진행상태를 의하한다. 세미클론 뒤에 linux컴퓨터에 어디에 내용을 보낼 건지, 'home' 디렉토리 밑에 있'rsync_welcome' 디렉토리 경로를 적어준다.

만약에'authorized_keys' 에다가 'Public Key' 를 추가하지 않으면 작동하지 않는데
'rsync' 기본적으로 'SSH' 라는 통신 방법을 이용해서 통신을 하기 때문에 'rsync' 가 동작할 때, 기본적으로 현재 사용자의 'SSH' 디렉토리로 들어가서 'Private Key' 와 'Public Key' 가 있는지를 확인하고, 있다면 이 키를 이용해서, 전송을 하기 때문에 로그인이 없이 이 과정이 가능하게 된다.

또 다른 활용은 Cron, 정기적으로 명령을 실행 시킬 때 쓰는 명령에 있어서
Cron과 같은 기능을 이용할 때 로그인을 해야 한다면 자동화를 할 수가 없다.
그런데 공개, 비공개 키를 이용해서 자동 로그인을 시켜놓으면, Cron과 같은 도구를 이용해서 정기적으로 rsync를 실행시켜서 백업같은 작업을 자동화 처리할게 된다.

RSA


ssh 공개 키와 비공개 키가 어떻게 동작하고 있는 지에 원리적인 측면

ssh 공개 키와 비공개 키를 활용하여 자동 로그인을 하는 과정에서 사용되는 암호화 기법이 있는데 rsa 라는 것이다

정보가 있는데 이 정보를 아무도 모르게 알아야 되는 사람만 알 수 있도록 이해할 수 없는 정보로 바꿀 수 있는데 이것을 암호화 영어로는 encrypt라고 부른다. 반대로 이렇게 암호화 된 상태를 다시 원래 상태로 돌리는 것을 복호화 암호를 푼다, 복구한다 그래서 decrypt
부른다.
암호화 방식에 따라서는 인크립트와 디립트를 할 때 어떠한 키를 이용해서 암호화를 하고
복화를 할 수 있다.
이런 방식은 암호화 를 할 때와 복화를 할 때 똑같은 키를 쓴다하여서 대칭적인 방식 이라고 부른다.

프라이빗 키와 퍼블릭 키가 있으면 어떤 정보를 암호화할 때 프라이 빗 키를통해서 암호를
하고 암호화된 정보를 다시 원래 상태로 돌릴 때는 퍼블릭 키를 써야지 돌릴 수 있다.
이런식으로 암호 할 때와 복구할 때 각각의 키가 달라지는 방식을 우리가 비대칭적 방식이라 부부른다.

ssh 키 젠을 통해서 프라이빗 키와 퍼블릭 키를 만들 때 둘은 같은 짝을 이루지만 어떤 정보를 암호 할 때는 프라이빗 키를 썼다면 것을 복구 할 때는 반드시 퍼블릭 키로만 복구 할 수 있다는 특성을 가지고 있는 것이 비대칭 암호화 기법이 그 중에 대표적인 것이 바로 rsa 라고
하는 것이다.


접속하는 쪽인 클라이언트 컴퓨터, 클라이언트 프로그램이 있고 접속하는 대상이 되는 컴퓨터는 ssh 서버가 설치되어 있습니다.
클라이언트 프로그램이 있어야 겠죠

리눅스 1 컴퓨터에는 프라이빗 키 그 프라이빗키로 만들어진 퍼블릭키가 있고
이 퍼블릭 키는 리눅스2 컴퓨터에 authorized_key 파일 안에 추가 되어 있다.

이는 리눅스 1의 퍼블릭 키를 가지고 있는 사람은 리눅스2 컴퓨터에 접속하는 것을 허용한다는 뜻을 가진다


먼저 ssh 클라이언트가 서버에 요렇게 접속을 하면 서버는 어떤 특별한 랜덤하게 생성한 키를ssh 클라이언트에게 준다.

ssh 클라이언트 프로그램은 ssh 디렉토리 안에서 id_rsa 파일이 있는지 없는지를 찾아보고
만약 id_rsa 파일이 있으면 저 프라이빗 키를 이용해 ssh 서버가 전송한 랜덤 키를 암호화 시키고 암호화 된 결과를 ssh 서버에 게 다시 전송한다.

ssh 서버는 자기가 보냈던 랜덤한 키를 프라이빗 키로 암호화 된 정보를 받게된다.
그 정보를 ssh 서버가 가진 authorized_key에 저장되어 있는 그 공개키를 이용해서 받은 파일을 복호화해 원래 상태로 돌려 복호화 된 결과가 ssh 서버가 처음에 전송했던 랜덤 키와 ssh 클라이언트가 보내준 암호화 된 키를 복호화 된 그 결과가 서로 같은지 확인한다.

결과 같으면 ssh 클라이언트는 authorized_keys에 저장되어 있는 퍼블릭 키를 만든 사람이라는 것을 확인하여 로그인을 해 준다.

profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.

0개의 댓글