[서버 생성] Rocky 8.10에서 SSH 접속 허용하기

Bulgogi-Pizza·2025년 1월 4일

웹 서버 구축

목록 보기
5/16

타 네트워크에 소속된 PC로 리눅스 서버에 접속하여 사용할 수 있게 하기 위해서 SSH 접속 허용이 필요하다.

아래 블로그를 참조하여 SSH 접속 허용기를 작성해보겠다.

https://kim-yj-0308.tistory.com/3
https://god-logger.tistory.com/124
https://velog.io/@beneficial/%EC%9D%B8%ED%84%B4%EA%B8%B0%EB%A1%9D-ssh%EC%99%80-sshd

참조 블로그들에게 늘 감사한 마음을 느낀다.

SSH

SSH(Secure Shell)는 네트워크 상의 다른 컴퓨터에 로그인하거나 원격시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
SSH는 나가는 요청(outbound)이다.
telnet을 사용할 경우 통신 내용은 평문이기에 통신 경로를 읽힐 경우 어카운트 정보나 패스워드가 밝혀질 가능성이 높다. 반면 ssh에는 경로를 따라가는 데이터가 암호화되어 있기에 안정성이 높아진다.

SSHD

SSHD는 SSH Daemon이다. (=Open server process)
데몬은 백그라운드 상에서 요청을 기다리는 프로그램을 뜻하며, 일반적으로 프로세스이다.
SSH 연결을 받아주기 위해(inbound) 대기하는 프로세스라고 이해하면 된다.
SSH 프로토콜을 사용하여 들어오는 연결을 수신하고 프로토콜의 서버 역할을 한다.
사용자 인증, 암호화, 터미널 연결, 파일 전송 및 터널링을 처리한다.

sshd_config

/etc/ssh/sshd_config : 들어오는 설정(inboud), 암호화 옵션, 인증 옵션, 파일 위치, 로깅 및 기타 다양한 매개 변수를 지정한다.

sshd_config의 주된 설정 항목으로는

  • port : ssh포트번호, 기본 22
  • protocol : ssh 버전
  • HostKey : host의 비밀키 파일
  • PermitRootLogin : root 로그인 허가여부
  • AuthorizedKeysFile : 공개키가 저장되어있는 파일명
  • PermitEmptyPasswords : 빈 패스워드 허가 여부
  • PasswordAuthentication : 패스워드 인증 허가 여부

가 있다.

port xx

  • 기본값은 22이다.

Allowusers <username> root

  • 로그인을 허락할 계정을 써준다.

Protocol 2

  • protocol 2로 설정하면 서버는 버전 2로만 작동하고 ssh1을 사용해 접속 요청하는 클라이언트는 받을 수 없다.
  • protocol 1로 설정하면 버전 2를 사용하는 ssh2 사용자의 요청을 받을 수 없다. 보안상 protocol 1은 사용하지 않는다고 한다.

ListenAddress 0.0.0.0

  • sshd 데몬이 inbound를 허용할 주소를 말한다. 0.0.0.0은 모든 주소이다.

SyslogFacility AUTH

  • /etc/syslog.conf 에서 정의한 로그 facility 코드이다.
    가능한 값은 DAEMON, USER, AUTH, LOCAL[0~7]이다.
  • 기본값은 AUTH이다.
  • Facility란 메시지를 생성하는 하위 시스템을 말한다.
  • 구축해보니 AUTHPRIV도 가능하다. 찾아봐야겠다.

LogLevel INFO

  • 로그 레벨을 지정하는 것이다.
    가능한 값은 QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUGS이다.

#Authentication:LoginGraceTime 2m

  • 유저의 로그인이 성공적으로 이루어지지 않았을 때 설정 시간 후에 서버가 연결을 끊는 시간이다.
  • 값이 0이면 시간제한이 없다. 기본값은 2분이다.

PermitRootLogin no

  • root 로그인 허용여부를 결정하는 것이다. yes, no, without-password를 사용할 수 있다.
  • 보안상 no로 설정하였고, no로 설정하면 직접 root로 접속이 불가능하다.
  • yes로 하기보다는 일반계정으로 로그인 후 su 명령으로 root 로 전환하는 것이 보안상 안전하다.

#StrictModes yes
#RSAAuthentication yes

  • RSA 인증의 시도여부를 정의한다. ssh1 프로토콜에 사용하기 위해 예약된 것으로, ssh1을 사용하고 운영상 보다 안전하게 운영하려면 이 옵션을 yes로 설정하는 것이 좋다.
  • 현재는 ssh1 프로토콜을 사용하지 않으므로 주석처리한다.

PubkeyAuthentication yes

  • sshd가 public key 기반의 인증을 사용할 것인지 여부를 정의한다.

#AuthorizedKeysFile .ssh/authorized_keys

RhostsAuthentication no

  • sshd가 rhosts 기반의 인증을 사용할 것인지 여부를 정의한다.
    rhosts 인증은 안전하지 못하므로 no로 한다.

#Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes

  • 인증 시 rhosts와 shosts파일의 사용여부를 정의한다.
  • 보안상의 이유로 인증할 때 rhosts와 shosts 파일을 사용하지 않도록 한다.

#For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
HostsRSAAuthentication no

  • /etc/hosts.equiv 파일이 있으면 이것을 사용해 인증한다.
  • 이 또한 보안상 별로 안좋은 방법이기에 허용하지 않는다.
    RSA 호스트 인증과 맞추어 rhosts 인증의 사용여부를 정의한다.

PasswordAuthentication yes

  • 패스워드 인증을 허용한다. 이 옵션은 프로토콜 버전 1과 2 모두 적용된다.
  • 인증할 때 암호기반 인증방법의 사용 여부를 결정한다.

PermitEmptyPasswords no

  • 패스워드 인증을 할 때 서버가 비어있는 패스워드를 인정하는 것이다. 기본 값은 no이다.

X11Forwarding no

  • 원격에서 X11 포워딩을 허용하는 것이다. 이 옵션을 yes로 설정하면 xhost보다 안전한 방법으로 원격에 있는 X프로그램을 사용할 수 있다.

PrintMotd yes

  • 사용자가 로그인 하는 경우 /etc/motd (the message of the day) 파일의 내용을 보여줄 것인지 여부결정.
  • ssh 로그인을 환영하는 메시지나 혹은 공지사항 같은 것을 적어 놓으면 된다.

1. SSHD 설치위치 확인

which sshd

which 명령어로 패키지 설치 위치를 알 수 있다.

필자의 경우 /usr/sbin/sshd 에 설치되어 있다.

2. OpenSSH 설치 및 활성화

# openssh-server 설치
sudo dnf install -y openssh-server

# sshd 활성화
sudo systemctl enable sshd

# sshd 가동
sudo systemctl start sshd

3. 방화벽 설정

# ssh 포트를 방화벽에서 허용
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

4. 외부 접속 테스트

같은 네트워크 또는 다른 네트워크에서 SSH 클라이언트를 통해 Rocky Linux에 접속한다.

ssh username@server-ip

5. 포트포워딩

현재 로컬 서버가 iptime 공유기로 물려있어 ssh 포트를 외부의 특정 포트로 포트포워딩하여 외부로부터의 접속을 허용하였다.

같은 네트워크 내에서는 ssh 포트로 직접 접속이 가능함을 확인하였고,
외부 네트워크를 핸드폰 데이터의 핫스팟으로 구성하여 포트포워딩한 포트로 접속했을 때도 접속이 가능함을 확인하였다.

성공!

profile
궁금증은 못참는 편, 궁금한 개발자

0개의 댓글