SSH(Secure Shell)란?

LeeYulhee·2024년 6월 10일

👉 SSH란?


  • 네트워크를 통해 다른 컴퓨터에 안전하게 접근하고 명령을 실행할 수 있게 해주는 프로토콜
  • 주로 원격 서버 관리나 파일 전송에 사용되며, 암호화를 통해 데이터의 보안을 유지
  • SSH는 사용자 인증과 데이터 전송 모두에서 보안을 제공
  • 접속하는 쪽을 SSH 클라이언트, 클라이언트가 접근한 쪽을 SSH 서버라고 함



👉 주요 기능


  • 암호화된 연결
    • SSH는 네트워크를 통한 모든 통신을 암호화하여 외부로부터의 감청이나 데이터 변조를 방지
    • 키 교환을 통해 세션 키를 생성하고, 이 키를 사용하여 데이터를 암호화
  • 사용자 인증
    • 사용자가 서버에 접속할 때는 비밀번호를 사용하거나 더 안전한 공개키 인증 방식을 사용할 수 있음
    • 공개키 인증은 사용자가 개인 키를 비밀로 유지하면서, 서버에 등록된 공개 키와 매칭하여 인증을 수행
  • 데이터 무결성
    • SSH는 전송된 데이터가 중간에 변경되지 않았음을 확인하기 위해 MAC(Message Authentication Code)을 사용
  • 포트 포워딩
    • SSH를 통해 안전한 터널을 생성할 수 있으며, 이를 통해 SSH 커넥션을 통해 다른 네트워크 서비스에 안전하게 접근할 수 있음
    • ⇒ SSH 터널링이라고도 불림
  • SFTP/SCP
    • SSH 프로토콜을 기반으로 하는 파일 전송 프로토콜인 SFTP(Secure File Transfer Protocol)와 SCP(Secure Copy Protocol)를 사용하여 파일을 안전하게 전송할 수 있음



👉 SSH 서버 측에서 사용자의 권한 제한


  • SSH 서버 설정을 통해 특정 사용자나 그룹에 대한 접근 권한, 허용되는 작업, 접속 가능한 디렉토리 등을 제한할 수 있음
    • 사용자별, 그룹별로 설정
      • 서버 측에서 adduser (리눅스의 경우) 또는 useradd 명령을 사용하여 새 사용자 계정을 생성(SSH 접속 시에 사용자 계정이 필요함)
      • sshd_config 파일에서 AllowUsers, AllowGroups, DenyUsers, DenyGroups 지시어를 사용하여 특정 사용자나 그룹의 접근을 제한하거나 허용할 수 있음
    • chroot 환경 설정
      • 사용자가 로그인 후 제한된 디렉토리(홈 디렉토리 등) 안에서만 작업을 수행하도록 강제하는 chroot 환경을 설정할 수 있음
      • 이를 통해 사용자가 시스템의 나머지 부분에 접근하는 것을 막을 수 있음
    • 명령어 제한
      • 특정 사용자가 SSH를 통해 접속할 때 실행할 수 있는 명령어를 제한할 수 있음
      • 예를 들어, 공개키 파일(authorized_keys)에 command="specific-command" 옵션을 추가하여 사용자가 특정 명령어만 실행할 수 있도록 설정할 수 있음
    • 포트 포워딩, X11 포워딩 제한
      • sshd_config에서 AllowTcpForwarding 또는 X11Forwarding 옵션을 no로 설정하여 포트 포워딩이나 X11 포워딩을 금지할 수 있음
      • 이를 통해 사용자가 네트워크를 통해 추가적인 서비스에 접근하는 것을 방지할 수 있음
    • 사용자별 환경 변수 설정
      • 사용자의 ~/.ssh/environment 파일이나 sshd_configPermitUserEnvironment 옵션을 사용하여 환경 변수를 설정해 사용자의 세션 설정을 제어할 수 있음



👉 SSH 접속 명령어


  • 기본 명령어
    ssh username@hostname
    • username : 사용자 이름(계정)
    • hostname : 원격 서버의 호스트 이름 또는 IP 주소
  • 포트 지정
    ssh -p 2222 username@hostname
    • SSH 서버가 기본 포트(22)가 아닌 다른 포트에서 실행되고 있는 경우, 해당 포트를 지정해야 함
  • 공개키 인증 파일 지정
    ssh -i /path/to/private_key username@hostname
  • X11 포워딩 활성화
    ssh -X username@hostname


👉 운영 체제 별 SSH 기본 설정


  • 리눅스
    • 대부분의 리눅스 배포판에서는 SSH 서버(일반적으로 sshd 서비스)가 기본적으로 설치되어 있음
    • 하지만, 대부분의 경우 기본적으로 활성화되어 있지 않음
    • 사용자 또는 관리자가 SSH 서비스를 수동으로 활성화하고 시작해야 함
  • macOS
    • Remote Login 기능을 통해 SSH 접속을 허용
    • 이 기능은 기본적으로 비활성화되어 있으며, 별도로 설정에서 활성화 해야 함
    • 이 설정을 활성화하면 지정된 사용자나 모든 사용자에 대해 SSH 접속을 허용할 수 있
  • Windows
    • 기본적으로 SSH 서버가 설치되어 있지 않음
    • Windows 10이나 Windows Server 2019 이후 버전에서는 선택적 기능으로 OpenSSH 서버를 설치할 수 있음
    • 설치 후에는 서비스를 수동으로 시작하거나 자동 시작으로 설정해야 함



👉 참고 사항


  • 윈도우에서 제공하는 원격 데스크톱 연결은 SSH가 아닌 RDP(Remote Desktop Protocol)을 사용
    • RDP는 마이크로소프트에서 개발한 프로토콜로, 주로 윈도우 시스템 간의 원격 데스크톱 세션을 구성할 때 사용
    • 이 프로토콜은 사용자가 네트워크를 통해 다른 컴퓨터의 그래픽 사용자 인터페이스에 접근할 수 있게 해주며, 마우스와 키보드 입력 등을 원격 컴퓨터로 전송할 수 있음
  • SSH는 주로 텍스트 기반의 커맨드 라인 인터페이스 작업에 사용되며, 리눅스나 유닉스 계열 시스템에서 더 자주 사용됨
    • SSH는 안전한 데이터 전송, 원격 시스템과의 안전한 커맨드 실행 등을 제공
    • 필요시 그래픽 사용자 인터페이스를 위한 X11 포워딩을 제공할 수 있지만, 이는 RDP만큼 직관적이거나 효율적이지 않을 수 있음
  • X11 포워딩
    • 원격 호스트의 그래픽 사용자 인터페이스(GUI) 어플리케이션을 로컬 컴퓨터에서 실행하는 기능
    • X11은 유닉스와 리눅스 시스템에서 GUI를 구현하는 데 사용되는 표준 디스플레이 서버
    • X11 포워딩을 사용하면, 사용자는 네트워크를 통해 보안 연결을 맺은 상태에서 원격 시스템에 있는 GUI 프로그램을 자신의 로컬 머신에서 마치 로컬에서 실행되는 것처럼 볼 수 있음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

2개의 댓글

comment-user-thumbnail
2024년 6월 20일

RDP 관련 내용은 VNC랑 묶어서 비교하면 좋지 않을까 싶어요.

1개의 답글