SSH(Secure Shell) 다루기
SSH(Secure Shell)란 무엇인가?
SSH는 네트워크 프로토콜의 하나로, 인터넷을 통한 안전하지 않은 네트워크 상에서
안전하게 데이터를 전송하고 원격 시스템을 관리할 수 있는 방법을 제공합니다.
SSH는 데이터 암호화, 인증 및 데이터 무결성 보호를 통해 보안을 제공합니다.
SSH의 안전성 이유
암호화: SSH는 전송 중인 모든 데이터를 암호화하여, 중간자 공격이나 패킷 스니핑을 통한 데이터 도청을 방지합니다.
인증: SSH는 사용자와 서버 양쪽 모두를 인증하는 메커니즘을 사용합니다.
사용자는 비밀번호 또는 공개키/개인키 쌍을 통해 인증할 수 있습니다.
데이터 무결성: SSH는 전송된 데이터가 변경되지 않았음을 보증합니다.
이는 해시 기반 메시지 인증 코드(HMAC)를 사용하여 데이터의 무결성을 검증합니다.
왜 SSH를 사용해야 하는가?
보안성: 민감한 데이터를 안전하게 전송하고, 원격 시스템에 안전하게 접속할 수 있습니다.
편리성: VPN이나 다른 보안 통신 수단에 비해 설정이 간단하며, 다양한 운영 체제에서 기본적으로 지원됩니다.
다용도성: 파일 전송(SFTP), 포트 포워딩, 원격 명령 실행 등 다양한 작업을 지원합니다.
SSH 키 관리
원격 시스템 관리: 서버나 네트워크 장비 등 원격 위치의 시스템을 안전하게 관리할 수 있습니다.
안전한 파일 전송: SFTP(SSH File Transfer Protocol)를 통해 파일을 안전하게 전송할 수 있습니다.
애플리케이션 포트 포워딩: 안전하지 않은 애플리케이션을 SSH 터널을 통해 보안적으로 접속할 수 있게 합니다.
SSH와 함께 알아두면 좋은 것들
공개키 인프라(PKI):
SSH 인증에 사용되는 공개키/개인키 쌍의 관리 및 운용을 이해하는 것이 중요합니다.
네트워크 보안 기본 원칙:
SSH는 네트워크 보안의 한 부분이므로, 네트워크 보안의 기본 원칙과 베스트 프랙티스를 함께 학습하는 것이 유익합니다.
클라우드 서비스와의 통합:
AWS, Azure, Google Cloud 등 대부분의 클라우드 서비스에서는 SSH를 통한 인스턴스 관리를 지원합니다.
클라우드 서비스에서 SSH를 효율적으로 사용하는 방법을 배우는 것이 좋습니다.
SSH 키 관리
개인키 위치
구분 | 공개키 위치 | 개인키 위치 | 설명 |
공개키 |
서버의 ~/.ssh/authorized_keys 파일 | - | 클라이언트의 공개키를 서버에 저장합니다. 이를 통해 서버는 해당 공개키와 짝을 이루는 개인키를 가진 클라이언트의 접속을 허용합니다. |
개인키 | - | 클라이언트의 ~/.ssh/ 디렉토리 (예: id_rsa, keyfile.pem) | 클라이언트는 개인키를 안전하게 보관해야 하며, 서버에 접속 시 이 개인키를 사용하여 인증합니다. 개인키는 절대 공유되어서는 안 됩니다. |
.pem 파일 사용
위치사용처 설명
파일 유형 | 위치 | 사용처 | 설명 |
.pem | 클라이언트의 ~/.ssh/ 디렉토리 또는 안전한 저장소 | SSH 접속, SSL/TLS 인증서 등에 사용 | .pem 파일은 개인키, 공개키, 인증서 등을 포함할 수 있는 포맷입니다. 특히 AWS 같은 클라우드 서비스에서는 EC2 인스턴스 접속을 위한 SSH 개인키로 .pem 파일을 사용합니다. |
명령어
작업 | 명령어 | 설명 |
SSH 키 생성 | ssh-keygen | 사용자의 SSH 키 쌍(공개키/개인키)을 생성합니다. 기본적으로 ~/.ssh/id_rsa (개인키)와 ~/.ssh/id_rsa.pub (공개키)에 저장됩니다. |
공개키 서버에 추가 | ssh-copy-id 사용자명@서버주소 | 사용자의 공개키를 서버의 ~/.ssh/authorized_keys 파일에 추가합니다. 이를 통해 비밀번호 없이 서버에 접속할 수 있습니다. |
SSH 접속 (개인키 사용) | ssh -i /path/to/private_key.pem 사용자명@서버주소 | .pem 포맷의 개인키를 사용하여 SSH로 서버에 접속합니다. |
사용자 추가 (서버) | sudo adduser 새사용자명 | 새로운 사용자 계정을 서버에 추가합니다. |
사용자 권한 부여 (sudo 권한) | sudo usermod -aG sudo 새사용자명 | 새로 추가된 사용자에게 sudo 권한을 부여합니다. |
사용자 목록 보기 | cat /etc/passwd | 시스템에 있는 모든 사용자의 목록을 보여줍니다. 사용자 이름은 각 줄의 첫 번째 항목에 위치합니다. |
사용자 그룹 확인 | groups 사용자명 | 지정된 사용자가 속한 그룹을 보여줍니다. |
SSH 사용 예시
상황: 개발자가 새로운 Ubuntu 서버에 안전하게 접속하고자 할 때
1)SSH 키 생성:
명령어: ssh-keygen
결과: 사용자의 홈 디렉토리(~/.ssh/)에 id_rsa(개인키) 및 id_rsa.pub(공개키) 생성
2)공개키를 서버에 추가:
명령어: ssh-copy-id 사용자명@서버주소
결과: id_rsa.pub의 내용이 서버의 ~/.ssh/authorized_keys 파일에 추가되며,
이후 비밀번호 없이 서버에 접속 가능
3)최종 결과
생성된 SSH 키를 이용하여 서버 관리자는 개발자의 접속을 허용할 수 있으며,
개발자는 비밀번호 입력 없이 보다 안전하게 서버에 접속할 수 있습니다.
상황: 개발자가 자신의 SSH 키를 사용하여 원격서버에 접속하려고 할 때
1)SSH 접속
명령어: ssh 사용자명@서버주소
예상 결과: 사용자는 비밀번호 입력 없이 원격 서버에 접속
2)최종 결과
개발자는 이 방법을 통해 원격 서버에서 필요한 작업(예: 업데이트, 설정 변경 등)을 수행할 수 있습니다.
상황: AWS에서 제공한 .pem 키 파일을 사용하여 EC2 인스턴스에 접속하고자 할 때
1)SSH 접속 (.pem 사용):
명령어: ssh -i /path/to/your-key.pem ec2-user@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
2)최종 결과
사용자는 .pem 키 파일을 통해 EC2 인스턴스에 접속