개발 공부/리눅스

SSH(Secure Shell) 다루기

solutionMan 2024. 2. 18. 19:08
반응형

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 인스턴스에 접속

 

반응형