운영체제에 없어서는 안될 중요한 프로그램인 Shell에 대해 알아보고,
클라우드 서비스에서 Shell 환경에 접속하기 위한 프로토콜인 SSH에 대해 알아보겠습니다.
🗣️ 사용자로부터 명령을 받아 번역하고 해석하고 프로그램을 실행시켜줌
사용자와 커널 간에 다리역할
운영체제 안에 Shell이 존재하며,
저희가 주로 사용하는 GUI 환경과 명령어를 한줄씩 입력하는 CLI 환경 모두 Shell을 거칩니다.
컴퓨터를 조작하는데 없어서는 안될 필수적인 요소입니다.
마치 Java 바이트코드를 실행시키는데 JVM안에 Interpreter같은 느낌입니다.
🗣️ 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜
위에서 설명했듯이, Shell은 명령을 받아 번역 후 해석하여 그에 맞는 프로그램을 실행시키는 역할입니다.
컴퓨터를 조작하는데 꼭 필요한 친구겠죠?
원격 호스트에 접속한다는 것은 원격 환경을 제어한다는 의미이므로, 결국 원격의 Shell에 접속한다는 행위라고 볼 수 있습니다.
이름과 관련있죠?
SSH은 명령어를 전달하는데 있어 네트워크를 통해 전달하다 보니 정보가 외부로 노출될 수 있습니다.
이를 위해 강화된 보안을 적용시켜 네트워크를 통해 명령어를 안전하게 원격 환경에 전달할 수 있도록 돕습니다.
AWS같은 클라우드 서비스 같은경우 SSH를 필수적으로 거칩니다.
👉 설치되어 있는가
원격으로 제어하고 싶은 클라이언트에서는 SSH Client를 설치해야 하며,
원격 서버는 SSH를 설치해야 합니다.
Window와 Linux에서는 둘 다 기본적으로 설치되어 있습니다.
여기서 알 수 있는 사실은
이들은 Application Layer에 속해 있는 응용 프로그램들이라는 점입니다.
👉 서로의 정체를 알아야 한다
연결을 위해서는 서로의 정체를 알아야 하며, 이는 비대칭키 방식을 사용합니다.
우선 공개키(.pub
)와 개인키(.pem
)로 이루어진 Key Pair
를 생성한 후
원격 제어 서버에 공개키를 전달합니다.
공개키는 공개되어있으니 유출되어도 상관없습니다.
이후 서버 측에서 공개키를 이용해 문제를 만든 후
클라이언트에서 개인키를 통해 문제를 푸는 구조입니다.
자세한 방식은 RSA를 참고해주세요.
👉 명령어 전달
이제 연결이 되었으니 클라이언트에서 명령어를 전달할 차례입니다.
명령어를 전달하기 위해서는 대칭키 방식을 사용하여 전달합니다.
Shell은 kernel와 user 사이에 있는 명령어 interpreter및 실행
SSH는 원격 조작을 위한 보안 프로토콜
클라이언트, 서버 각각 SSH Client, SSH 설치되어 있어야 함
비대칭키 방식을 통한 연결, 대칭키 방식을 통한 데이터 전송