jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect SFTP channel. Message [4: Received message is too long: 458961709]]
1. 문제상황
기존에 잘 작동하던 SFTP를 활용한 CI/CD가 갑자기 작동하지 않는다. 에러 메시지에 따르면 약 438mb의 메시지를 받은 상황인데, 파일을 실제로 업로드하는 시점이 아닌 SFTP연결 시도를 하는 순간(SSH연결을 설정하고 초기화하는 부분)에도 이렇게 큰 응답을 받는 상황이었다.
2. 원인파악
SSH 접속시, 서버 간 구분을 주기 위해 ~/. bashrc의 설정을 통해 웰컴메시지를 출력하는 부분이 문제였다. (다음 포스트에서 진행한 서버별 웰컴 메시지 등록 부분에서 작업과정 확인 가능)
2024.12.31 - [AWS] - [AWS] Bastion 서버 설정 및 서버 접속 상태 한눈에 구분하기
[AWS] Bastion 서버 설정 및 서버 접속 상태 한눈에 구분하기
1. Bastion 서버란?Bastion 서버란 클라우드 환경, 네트워크 환경에서 보안 게이트웨이 역할을 하는 서버로, 외부 네트워크에서 private 서버로 접속할 때 보안을 강화해 주고 접근제어를
junhkang.tistory.com
SFTP클라이언트는 SSH 세션이 시작될떄 특정 초기화 메시지를 받아야 한다. 웹컴메시지가 삽입되면서 클라이언트가 메세저리를 SFTP데이터로 잘못 해석될 수 있다.
3. 메세지 크기의 원인
내가 작성한 웰컴 메시지는 고작 한 줄이고, kb이하의 단위인데 어떻게 저렇게 큰 메시지 크기를 응답받았을까?
3-1. 데이터 첫부분의 잘못된 해석
SSH 세션 시작될때, 서버로부터 잘못된 형식의 데이터를 받아서 올바르게 해석하지 못하고 잘못된 패킷크기로 계산되는 경우가 있다.
예를 들어 패킷이 0x1 B6 C8 FDD(16진수)로 시작하면, 이를 10진수로 변환한 값이 458961709가 된다. 웰컴 메시지가 이런 종류의 데이터를 포함하거나 데이터의 첫 부분을 잘못 해석한 경우 이런 식으로 계산될 수 있다.
3-2. 버퍼오염
웰컴 메세지와 SFTP초기화 데이터가 섞이면서 클라이언트 버퍼가 오염될 수 있다. 이 경우 클라이언트는 비정상적인 크기의 메시지 읽었다고 판단한다.
4. 해결
근본적으로는 의미없는 웰컴 메시지, 서버 첫 접속 시의 자동화된 문구 출력 자체를 없애는 것이 좋겠지만, 꼭 써야 한다면
if [[ "$SSH_TTY" ]]; then
echo "Welcome to the server!"
fi
이렇게 웰컴 메세지가 비인터렉티브 세션 (SFTP)에서는 출력되지 않도록 수정하여 해결할 수 있다.
'Linux' 카테고리의 다른 글
[Linux] JDK 여러 버전 적용하기, 여러개의 패키지 관리하기 (update-alternatives) (0) | 2024.02.05 |
---|---|
[Linux] 스왑 메모리(Swap Memory)의 개념과 적용방법 (1) | 2023.10.23 |
[Linux] 심볼릭 링크 (Symbolic link) 설정하기 (1) | 2023.10.09 |