SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리

반응형
SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리

SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리

개요

SUSE Enterprise 16에서 SSH 포트 변경은 OpenSSH 서버 설정, 방화벽, SELinux 정책을 함께 확인해야 한다. 단순히 Port 2222만 추가해도 되는 경우가 있지만, 운영 환경에서는 포트가 실제로 적용됐는지, 방화벽에서 허용됐는지, SELinux가 해당 포트를 허용하는지까지 함께 점검해야 안전하다.

핵심 흐름은 기존 SSH 세션 유지 → 새 포트 추가 → 설정 검사 → 방화벽 허용 → 서비스 재시작 → 새 창에서 접속 테스트 → 기존 22번 제거 순서다.
특히 원격 서버에서는 SSH가 끊기면 콘솔 접속이 필요할 수 있으므로, 22번 포트를 바로 제거하지 않는 것이 안전하다.

환경

이 정리는 SUSE Enterprise 16 또는 SLES 16 계열에서 SSH 접속 포트를 22번에서 2222번 같은 다른 포트로 변경하는 상황을 기준으로 한다. SLES 16은 관리 도구와 기본 파일 배치 방식이 이전 버전과 다를 수 있지만, SSH 서버 동작 자체는 여전히 OpenSSH 설정을 통해 제어한다.

항목 확인 대상
운영체제 SUSE Enterprise 16 / SLES 16
SSH 서비스 sshd
주요 설정 /etc/ssh/sshd_config, /etc/ssh/sshd_config.d/*.conf
방화벽 firewalld 사용 여부 확인
보안 정책 SELinux 사용 시 SSH 포트 타입 등록 필요 가능

증상

SSH 포트 변경 과정에서 가장 흔한 증상은 새 포트로 접속이 되지 않거나, PuTTY에서 Using keyboard-interactive authentication 메시지가 나온 뒤 인증이 실패하는 경우다. 다만 이 문구 자체는 에러가 아니라 서버가 키보드 대화형 인증 방식을 사용하고 있다는 안내 메시지다.

PuTTY에서 보이는 일반적인 메시지

Using username "root".
Using keyboard-interactive authentication.

이 다음에 비밀번호 입력창이 나오고 접속되면 정상이다. 반대로 Access denied, Server refused our key, Server unexpectedly closed network connection 같은 문구가 이어지면 인증 설정이나 계정, PAM, SSHD 설정을 확인해야 한다.

1차 점검

먼저 현재 SSH가 어떤 포트로 동작 중인지 확인한다. sshd -T는 SSHD가 최종적으로 읽은 설정값을 보여주므로, 실제 적용 상태를 확인할 때 유용하다.

ss -tlnp | grep sshd
sshd -T | grep -i port

결과가 port 22로만 나온다면 현재 SSH는 22번 포트로 동작 중이다. 그런데 설정 파일 어디에도 Port 항목이 없다면, 이는 설정 파일에서 지정한 값이 아니라 OpenSSH 기본값인 22번을 사용하고 있는 상태로 보면 된다.

Port 설정 위치 찾기

grep -Rin "^Port" /etc/ssh
grep -Rin "Port" /etc/ssh
find /etc/ssh -type f -exec grep -Hn "^Port" {} \;

예를 들어 아래처럼 나오면 해당 파일에서 SSH 포트가 지정된 것이다.

/etc/ssh/sshd_config:17:Port 22
/etc/ssh/sshd_config.d/50-server.conf:3:Port 22

Include 설정도 함께 확인한다.

grep -R "Include" /etc/ssh

SUSE 환경에서는 Include /etc/ssh/sshd_config.d/*.conf 형태로 분리 설정을 읽는 경우가 있다. 따라서 포트를 별도 파일로 관리하려면 /etc/ssh/sshd_config.d/99-custom.conf 같은 파일에 운영자 설정을 넣는 방식이 관리하기 쉽다.

심화 분석

SUSE Enterprise 16에서 SSH 포트 변경이 실패하는 원인은 보통 세 가지로 나뉜다. 첫째는 SSHD 설정 오류, 둘째는 방화벽 미허용, 셋째는 SELinux 포트 정책 문제다. 실제 사용 시 이 세 가지 중 하나만 빠져도 새 포트 접속이 실패할 수 있다.

1. SSHD 설정 오류

설정 파일 문법이 잘못되면 SSHD가 재시작되지 않거나 접속이 끊길 수 있다. 적용 전에는 반드시 아래 명령으로 문법을 확인한다.

sshd -t

아무 메시지가 없으면 문법상 정상이다. 메시지가 나온다면 해당 라인을 수정한 뒤 다시 검사해야 한다.

2. 방화벽 미허용

SSHD가 2222번 포트로 정상 대기 중이어도 방화벽에서 막혀 있으면 외부 접속은 실패한다. firewalld를 사용 중이라면 포트를 명시적으로 열어야 한다.

firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

3. SELinux 포트 정책 문제

SELinux가 활성화된 환경에서는 SSHD가 기본적으로 허용된 포트 외의 포트에 바인딩하지 못할 수 있다. 이 경우 새 SSH 포트를 ssh_port_t 타입으로 등록한다.

semanage port -a -t ssh_port_t -p tcp 2222

이미 등록된 포트를 수정해야 하는 경우에는 아래처럼 변경 명령을 사용할 수 있다.

semanage port -m -t ssh_port_t -p tcp 2222

semanage 명령이 없다면 관련 패키지를 설치한다.

zypper install policycoreutils-python-utils

복구

운영 서버에서 가장 안전한 방식은 기존 22번을 유지한 상태로 2222번을 추가하고, 새 포트 접속이 확인된 뒤 22번을 제거하는 순서다. 관리자 입장에서 SSH 포트 변경은 보안 설정이면서 동시에 원격 접속 생존성과 직결되므로, 한 번에 기존 포트를 닫지 않는 것이 좋다.

1. 기존 설정 백업

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

만약 /etc/ssh/sshd_config 파일을 직접 수정하지 않고 별도 파일로 관리한다면, 아래처럼 사용자 정의 설정 파일을 만든다.

vi /etc/ssh/sshd_config.d/99-custom.conf

2. 안전한 포트 추가 설정

처음에는 22번과 2222번을 동시에 열어둔다. 이렇게 하면 새 포트 접속 테스트에 실패해도 기존 SSH 세션이나 22번 포트로 복구할 수 있다.

Port 22
Port 2222
PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes
PermitRootLogin yes
PermitRootLogin yes는 root 비밀번호 로그인을 허용할 수 있으므로 보안 정책에 따라 신중히 사용해야 한다.
가능하면 일반 사용자로 로그인한 뒤 sudo를 사용하는 방식이 더 안전하다.
root 로그인이 꼭 필요하다면 접속 허용 IP 제한, 키 인증, 방화벽 정책을 함께 적용하는 것이 좋다.

3. 설정 검사

sshd -t

오류가 없다면 SSHD를 재시작하거나 reload한다.

systemctl restart sshd
systemctl reload sshd

4. 방화벽 허용

firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

5. 새 포트 접속 테스트

현재 SSH 세션은 끊지 말고 새 터미널이나 PuTTY 새 창에서 접속을 테스트한다.

ssh -p 2222 user@서버IP

PuTTY나 Xshell에서는 접속 대상 포트를 2222로 지정한 뒤 접속한다. 접속이 정상적으로 되면 새 포트 설정은 성공한 것이다.

6. 최종 적용 상태 확인

sshd -T | egrep 'port|passwordauthentication|kbdinteractiveauthentication|usepam|permitrootlogin'

여기에서 port 22port 2222가 함께 보이면 두 포트가 모두 적용된 상태다. 새 포트 접속까지 확인한 뒤 기존 22번을 제거할 수 있다.

7. 기존 22번 제거

새 포트 접속이 확실히 되는 것을 확인한 후 설정 파일에서 Port 22를 제거한다.

Port 2222
PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes
PermitRootLogin yes

firewalld에서 기존 SSH 서비스를 제거하려면 아래 명령을 사용한다.

firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
22번 제거 후에는 반드시 새 창에서 다시 접속 테스트를 진행한다.
기존 세션을 먼저 끊으면 문제가 생겼을 때 원격 복구가 어려울 수 있다.

PuTTY keyboard-interactive 메시지 확인

Using keyboard-interactive authentication 자체는 에러가 아니다. 문제는 그 다음에 어떤 메시지가 이어지는지에 따라 판단해야 한다.

메시지 의미 확인 항목
Access granted 정상 로그인 추가 조치 불필요
Access denied 비밀번호 또는 인증 정책 문제 비밀번호, 계정 잠김, PasswordAuthentication, PAM 확인
Server refused our key 키 인증 실패 authorized_keys, 권한, PubkeyAuthentication 확인
Server unexpectedly closed network connection 서버 측에서 연결 종료 sshd 설정 오류, PAM 오류, Shell 문제, AllowUsers/DenyUsers 확인

인증 관련 설정 확인

grep -E "PasswordAuthentication|KbdInteractiveAuthentication|UsePAM" /etc/ssh/sshd_config*

비밀번호 기반 로그인을 허용하려면 일반적으로 아래 설정을 확인한다.

PasswordAuthentication yes
KbdInteractiveAuthentication yes
UsePAM yes

root만 접속이 안 되는 경우

root 계정만 접속되지 않는다면 PermitRootLogin 설정을 확인한다.

grep PermitRootLogin /etc/ssh/sshd_config*

정책상 허용해야 한다면 아래처럼 설정할 수 있다.

PermitRootLogin yes

또는 키 인증만 허용하려면 다음 값을 사용할 수 있다.

PermitRootLogin prohibit-password

실시간 로그 확인

접속 실패 원인은 서버 로그를 보면서 접속을 다시 시도하면 가장 빠르게 확인할 수 있다.

journalctl -u sshd -f
tail -f /var/log/messages

재발 방지

SSH 포트 변경은 설정 파일 하나만 보는 작업이 아니다. 재발을 막으려면 설정 파일, SSHD 최종 적용값, 방화벽, SELinux, 인증 정책을 한 번에 점검하는 절차를 정해두는 것이 좋다.

변경 전에는 기존 SSH 세션을 유지한다.
새 포트를 먼저 추가하고 접속 확인 후 기존 포트를 제거한다.
sshd -t로 문법 오류를 먼저 확인한다.
sshd -T로 최종 적용값을 확인한다.
방화벽과 SELinux 정책을 함께 점검한다.

최종 점검 명령어 모음

sshd -t
sshd -T | grep -i port
ss -tlnp | grep sshd
firewall-cmd --list-all
find /etc/ssh -type f -exec grep -Hn "^Port" {} \;

만약 위 명령에서 Port 설정 파일이 전혀 나오지 않는데 sshd -T 결과가 port 22라면, 이는 설정 파일에서 지정된 값이 아니라 OpenSSH의 기본 포트가 적용된 상태로 판단하면 된다.

반응형