SSH는 Secure SHell의 줄임말로 다른 네트워크의 컴퓨터에 연결하거나 원격으로 프로그램을 실행하고, 파일 복사 등을 하게 해주는 프로토콜, 프로그램을 의미한다.
기본적으로는 22포트를 사용하며 암호화 기법을 사용하기 때문에 통신이 노출되어도 비교적 안전하다.
SSH의 기능으로는
보안 접속을 통한 ftp, 등을 제공
IP 스푸핑 방지 기능
IP 스푸핑은 자신의 IP를 속여 접속하는 행위를 의미한다.
수신 호스트가 패킷 판별할때는 패킷의 IP 주소만을 가지고 판단하기에 의도적으로 IP주소를 조작하여 이를 속이는 것이다.
SSH로 연결할때는 비밀번호 대신 key를 이용한다.
SSH키는 publlic key와 private key로 나뉜다. 키를 생성하면 이 두개가 만들어지는데 비공개키는 로컬 머신에, 공개키는 원격으로 조작하려는 기기에 있어야한다.
- 클라이언트는 해당 서버에 접속하기 위해 사용할 키 페어의 ID를 서버에게 전송한다.
- 서버는 해당 ID에 매칭 되는 공개키가 홈 디렉토리의 .ssh/authorized_keys 파일 안에 작성되어 있는지 찾는다.(처음 접속할때 공개키를 받을 것인지 묻고, 받는다면 저따가 저장됨)
- 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에게 전송한다.
- 클라이언트는 전달받은 암호화된 난수 값을 해당 서버의 개인키로 복호화한다. (일반적으로 SSH 클라이언트는 어떠한 개인키를 사용할 것인지 선택하게끔 되어 있다.)
- 이후 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고 이를 다시 서버에게 전송한다.
- 서버도 원래의 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트로부터 받은 값과 같은지 검사한다.
- 같다면, 올바른 클라이언트임이 인증되어 이제부터 본격적인 데이터 통신이 가능해진다.
이러한 방식은 비대칭 암호방식이라고 부르는데,
암호를 걸떄와 풀때 사용하는 키가 다르기 때문이다. public 키로 암호화하고, private키로 복호화한다.
클라이언트 -> 서버 공개키 줌
서버 -> 클라이언트 난수를 생성하고 공개키로 암호화하여 클라이언트에 전송
클라이언트 -> 서버 받은 암호화 난수를 개인키로 복호화하여 해시값을 전송
서버 -> 난수값을 이용하여 클라이언트 측에 받은 값과 같은지 검사
이런 방식으로 통신이 유출된다면 공개키는 강탈할 수 있기 때문에 클라->서버 측의 정보는 해독할 수 있지만
개인키가 없기 때문에 서버->클라이언트 정보는 복호화할수 없다.
대체로 서버에서 중요한 정보를 가지고 있고 클라이언트 측에서는 이를 요청하는 것이 잦기에 이런 방식이 효과적일 수 있는 것이다.
ssh-keygen을 통해서 간단하게 공개/비공개키를 만들 수 있다.
$ ssh-keygen -t rsa -b 4096
'TIL' 카테고리의 다른 글
TIL 2022-03-13 클린코드 6~9 (0) | 2022.03.13 |
---|---|
TIL 2022-03-12 클린 코드 1~5장 (0) | 2022.03.12 |
TIL 2022-03-07 PHP, JSON Schema, (0) | 2022.03.07 |
TIL 2022-03-06 Shell, protobuf, gRPC (0) | 2022.03.06 |
TIL 2022-03-03 Storybook (0) | 2022.03.04 |