#1. SSH 서비스

1. SSH의 개념

1) SSH란(Secure Shell)?

  • Secure Shell 의 약자로 데이터 전송에서 암호화 처리하여 보안이 강화된 원격 접속 서비스를 말한다.
  • 과거에 사용되던 텔넷(Telnet)의 경우 모든 데이터가 암호화 되지 않고 전송되어 악의적인 목적을 갖는 공격자가 중간에 패킷을 가로채 분석 후 해킹을 시도할 수 있기 때문에 현재는 잘 사용되지 않는다.

 

2. SSH 서비스 작동 확인

1) SSH 서비스 동작 여부 확인하기

$ sudo systemctl status sshd

 

2) 부팅시 자동 실행 여부 확인하기

$ sudo systemctl list-unit-files | grep sshd
  • grep 명령어 없이 출력하면 많은 내용이 출력되기 때문에 grep 명령어와 함께 사용한다.

 

3. SSH 보안 설정

  • SSH는 기본 포트번호 22번을 사용하고 있기 때문에 이를 임의의 포트로 변경한다.
  • 시스템의 모든 권한을 갖는 root계정에 대한 SSH 직접 접속을 차단하고 일반 사용자로만 접근이 가능하도록 해야한다.
    • 보안상 일반 사용자로 접속해서 root 권한을 빌려서 사용하는게 좋다.

1) 환경설정 파일 열기

$ sudo vi /etc/ssh/sshd_config

 

2) 환경설정 파일 아래의 내용 추가

# 기본 접속 포트 설정
Port 9901

# root 계정의 직접 로그인 차단
PermitRootLogin no
  • 대소문자를 구분하고, 이름과 값 사이에 " = " 표시는 없다.

 

3) SSH 서비스 재시작

$ sudo systemctl restart sshd

 

4) 방화벽 포트 설정

  • 기존에 기본 포트로 사용하던 22번 포트 번호를 삭제하고 새로 설정한 9901 포트 번호를 허용한다.
$ sudo ufw delete allow 22
$ sudo ufw allow 9901/tcp

 

5) 방화벽 규칙 다시 로드하기

$ sudo ufw reload

 

4. 외부에서 접속 확인

  • Windows, Mac 등의 호스트 운영체제에서 Ubuntu로 SSH 접속을 시도 할 때 변경된 포트번호를 명시 해야한다.
$ ssh 계정@리눅스아이피 -p포트번호

 

1) root로 로그인이 되지 않음을 확인

  • 비밀번호를 올바르게 입력하더라도 권한이 없다는 에러 메세지가 표시되어야 한다.

 

2) 일반 사용자 계정으로 정상 접속 확인

일반 사용자 계정으로 접속시 정상 접속

 

5. SSH 인증키를 사용한 로그인 설정

  • SSH 키는 공개 키 암호화 방식 및 인증 확인 응답 인증을 사용하는 SSH 서버에 대해 자체 식별하는 방식이다.
  • 비공개 서버에 접속하기 위해서는 인증 절차를 거쳐야 하는데, 기존에 비밀번호를 네트워크를 통해 보내는 비밀번호 인증은 네트워크 상에서 ID/비밀번호가 그대로 노출되는 문제가 있고, 접속할 때 마다 입력해야 하는 번거로움이 있다.
  • SSH 키는 이와 달리 공개키 암호 방식을 사용하여 서버에서 인증 받을 수 있으며, 암호를 생략하고 원격 호스트로 접속할 수 있다.
  • 인증키는 서버에서 생성하거나 접속할 클라이언트 컴퓨터에서 모두 생성할 수 있다.

1) 인증키 관련 파일

  • 인증키와 공개키가 일치해야지만 로그인이 이루어진다.
  • 인증키 이름이 chanco라고 가정
파일이름 설명
chanco 클라이언트 운영체제의 ~/.ssh 디렉토리에 보관되어야 할 인증키 파일
chanco.pub 서버 운영체제에서 접속할 사용자 계정 홈 디렉토리의 ~/.ssh 위치에 보관되어야 할 공개키 파일
authorized_keys 서버 운영체제에서 접속할 사용자 계정 홈 디렉토리의 ~/.ssh 위치에 존재해야 하며, 공개키 파일의 내용을 이 파일에 등록해야 한다.
인증키나 공개키 파일이름에 상관없이 고유한 파일명을 갖는다.

※ 인증키 파일을 클라이언트가 보관하고, 인증키를 접속하려는 대상 (서버 운영체제, github 등)에 보관하는 원리이다.

 

2) 서버 운영체제에서 인증서 생성하기

  • 서버 운영체제에 인증키 생성을 원하는 계정으로 로그인한 후 아래의 명령어를 수행한다.
$ ssh-keygen

명령어 입력
인증키 파일의 경로 입력

경로를 따로 입력하지 않을 경우 id_rsa로 파일명이 고정된다. 다른 인증키와 구분하기 위해서 가급적 파일이름을 지정해 주는 것이 좋다.

인증키 비밀번호 (입력하지 않는게 편하다)
인증키 생성 완료

 

3) 생성된 인증키 확인

  • .ssh 폴더로 들어가서 전체 목록을 조회하면 인증키가 생성된 것을 확인 할 수 있다.

 

4) 공개키 파일의 내용을 authorized_keys에 등록

    • 인증키 내용을 출력하고 authorized_keys에 redirection 처리한다.
$ cat ~/.ssh/myserver.pub >> ~/.ssh/authorized_keys

 

5) 생성된 인증키 파일을 클라이언트 운영체제에 내려받기

  • FTP 클라이언트를 사용하여 생성된 인증키 파일을 내려받는다.
  • ~/.ssh 디렉토리는 숨김 상태이기 때문에 FTP 클라이언트에 표시되지 않는다. (직접 폴더 경로를 입력해서 이동해야한다)
  • 클라이언트 운영체제의 사용자 홈 디렉토리 내에 있는 .ssh 폴더에 다운로드 받도록 FTP 클라이언트를 조정한다.

 

6) Mac 운영체제인 경우 인증키 설정 (Windows는 생략)

  • 만약 .ssh 폴더가 없다면 직접 생성한다.
$ mkdir ~/.ssh

 

  • 폴더 생성 후(있다면 생략) 이 폴더의 접근 퍼미션을 0700으로 설정해야 한다.
$ chmod 0700 ~/.ssh

 

  • ~/.ssh/myserver 위치로 인증키를 내려받았다면, 인증키 파일의 접근 퍼미션을 0600으로 설정해야 한다.
$ chmod 0600 ~/.ssh/myserver

 

7) 클라이언트 운영체제에서 접속 확인

  • 아래의 명령어로 ssh 접속을 시도한다.
  • 인증서가 정상적으로 식별되었다면, 비밀번호 입력 없이 로그인이 진행된다.
$ ssh 계정@리눅스아이피 -p포트번호 -i인증키경로

비밀번호 입력 없이 접속

※ 운영체제가 Mac인 경우 이 명령어를 쉘 초기화파일에 alias로 등록하면 더욱 간편하게 사용할 수 있다.

+ Recent posts