SUSE Enterprise 16 SSH 포트 변경과 PuTTY 인증 메시지 정리
개요
SUSE Enterprise 16에서 SSH 포트 변경은 OpenSSH 서버 설정, 방화벽, SELinux 정책을 함께 확인해야 한다.
단순히 Port 2222만 추가해도 되는 경우가 있지만, 운영 환경에서는 포트가 실제로 적용됐는지, 방화벽에서 허용됐는지, SELinux가 해당 포트를 허용하는지까지 함께 점검해야 안전하다.
특히 원격 서버에서는 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 22와 port 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
기존 세션을 먼저 끊으면 문제가 생겼을 때 원격 복구가 어려울 수 있다.
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, 인증 정책을 한 번에 점검하는 절차를 정해두는 것이 좋다.
새 포트를 먼저 추가하고 접속 확인 후 기존 포트를 제거한다.
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의 기본 포트가 적용된 상태로 판단하면 된다.
'지식 공유 > Server' 카테고리의 다른 글
| SUSE OS에서 PostgreSQL 기반 DBMS 대용량 처리 문제 정리 (0) | 2026.06.24 |
|---|---|
| 신규 개발 쿠버네티스 서버 구축과 기존 개발 클러스터 연동 방안 (0) | 2026.06.22 |
| WAS WildFly 설치 방법과 기본 설정 순서 (1) | 2026.06.20 |
| 쿠버네티스 K8s 파드 확인 방법과 운영 시 주의사항 (0) | 2026.06.20 |
| OS 보안 취약점 대응: 패스워드 복합도·deny 설정과 PAM 안전 작업 순서 (0) | 2026.05.27 |
