RHEL 8.4에서 root 계정 SFTP 접속 오류 해결 가이드 (feat. Neofetch)
클라우드 솔루션 구축 업무를 수행하면서, 대다수 솔루션 또는 오픈소스들이 RHEL 8 (CentOS 8)에서 동작하기 시작했습니다. 그래서 RHEL 8에 익숙해질 겸 TestBed를 RHEL 8.4로 설치했는데, root 계정에 대한 SSH는 접속이 되지만 SFTP는 접속이 안 되는 현상이 발생했습니다. 이 문제를 해결하는 데 꽤나 많은 시간을 보냈기에, 다른 엔지니어분들과 공유하고자 이 가이드를 작성합니다. (일반 사용자 계정은 SSH와 SFTP 모두 정상적으로 작동했습니다.)
1. SFTP 접속 에러 현상
macOS에서 SFTP 클라이언트를 통해 RHEL 8.4가 설치된 KVM 호스트에 root 계정으로 접속을 시도했을 때, 다음과 같은 오류 메시지가 발생하며 접속이 되지 않았습니다. FileZilla와 같은 GUI SFTP 클라이언트를 사용해도 동일한 현상이 나타났습니다.
hkjeon@MacBook-Pro ~ % sftp root@xx.xx.xx.4
Received message too long 458964786
Ensure the remote shell produces no output for non-interactive sessions.
hkjeon@MacBook-Pro ~ % sftp hk@xx.xx.xx.4
hk@xx.xx.xx.4's password:
Connected to xx.xx.xx.4.
sftp> exit
위 로그에서 확인할 수 있듯이, 일반 사용자 계정 (hk
)으로는 SFTP 접속이 정상적으로 이루어졌지만, root
계정에서는 Received message too long
이라는 메시지와 함께 접속이 실패했습니다. 이는 SFTP 통신 과정에서 예상치 못한 데이터가 수신되었다는 것을 의미합니다.
2. 원인 분석
이 SFTP 접속 오류의 원인은 이전에 블로그에 정리했던 Neofetch 자동 실행 설정 때문이었습니다. ~/.bashrc
파일에 Neofetch 명령어를 추가하여 로그인 시 자동으로 실행되도록 설정했는데, 이 부분이 문제가 되었습니다.
SFTP와 같은 비대화형(non-interactive) 세션은 셸 환경 설정 파일 (예: .bashrc
)에서 표준 출력(stdout)으로 어떤 메시지도 출력하지 않을 것을 기대합니다. 하지만 neofetch
명령어는 시스템 정보를 ASCII 아트와 함께 표준 출력으로 보여주기 때문에, SFTP 세션이 시작될 때 이 출력을 예상치 못한 데이터로 인식하여 오류를 발생시켰던 것입니다.
Red Hat 공식 문서에서도 .bashrc
에 입력한 명령어가 표준 출력을 하는 경우, SFTP 로그인 세션에서 제대로 처리하지 못하고 Received message too long
메시지를 볼 수 있다고 명시하고 있습니다.
3. 해결 방법
이 문제를 해결하는 가장 좋은 방법은 .bashrc
에 적용했던 설정을 .bash_profile
로 옮기는 것입니다. .bash_profile
은 로그인 셸(login shell)이 시작될 때만 실행되고, SFTP와 같은 비대화형 세션에서는 실행되지 않기 때문입니다. 이렇게 하면 Neofetch는 SSH 로그인 시에만 실행되고, SFTP 접속에는 영향을 주지 않습니다.
다음은 ~/.bash_profile
파일의 내용입니다. alias vi='vim'
과 neofetch
명령어를 .bash_profile
에 추가했습니다.
[root@hk-tb ~]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
alias vi='vim'
neofetch
export PS1='[\u@\[\033[1;31m\]\h\[\033[0m\] \W]\$'
이렇게 설정 변경 후, sftp root@xx.xx.xx.4
명령어를 다시 실행해보니 SFTP 접속이 정상적으로 이루어졌습니다. 또한, SSH를 통해 접속했을 때도 Neofetch가 여전히 잘 실행되는 것을 확인할 수 있었습니다.
4. 참고 자료
.bashrc
와 .bash_profile
의 차이를 이해하는 것은 리눅스 셸 환경을 효과적으로 관리하는 데 중요합니다.
- Login Shell: 사용자가 시스템에 로그인할 때 (예: SSH 접속, 터미널 에뮬레이터에서 로그인) 실행되는 셸입니다.
.bash_profile
환경 설정 파일을 먼저 읽고 실행합니다. - Non-login Shell: 사용자가 로그인 없이 실행되는 셸입니다 (예: 이미 로그인된 터미널에서 새로운 셸을 시작하거나, 스크립트 실행, SFTP 세션).
.bashrc
환경 설정 파일을 읽고 실행합니다.
리눅스에서 .bash_profile
은 실행될 때 먼저 .bashrc
를 실행하는 경우가 많습니다. RHEL 8의 기본 동작 또한 그렇습니다. 사용자 로그인 없이 실행하는 셸은 최소한의 실행 환경이 필요한 반면, 로그인 셸은 사용자의 필요에 따라 환경을 구성할 수 있도록 설계되어 있습니다. 이러한 차이점을 이해하고 적절한 설정 파일에 명령어를 배치하는 것이 중요합니다.
마무리
이 가이드는 RHEL 8.4 환경에서 root 계정의 SFTP 접속 오류가 .bashrc
파일의 Neofetch 자동 실행 설정 때문에 발생했음을 밝히고, .bash_profile
로 설정을 옮기는 해결 방법을 제시했습니다. 이 경험 공유가 비슷한 문제를 겪는 엔지니어분들께 도움이 되기를 바랍니다. 셸 환경 설정 파일의 정확한 이해는 안정적인 시스템 운영에 필수적입니다.
'깐돌의 클라우드 도구함' 카테고리의 다른 글
[Linux] PXE 서버 구축 및 자동 OS 설치 가이드 (0) | 2025.05.29 |
---|---|
[Linux] RHEL 웹 콘솔 (Cockpit) 설치 및 활용 가이드 (0) | 2025.05.28 |
[Linux] 시스템 정보 확인하기 (neofetch) (1) | 2025.05.27 |
[Linux] 로그인 배너 설정 가이드 (0) | 2025.05.27 |
[컨테이너] RHOCP4 클러스터에서 노드를 효과적으로 관리하는 방법 (0) | 2025.05.26 |