728x90
"jenkins failed to connect or change directory, jenkins.plugins.publish_over.BapPublisherException on: Failed to SFTP channel. Message [java.io.IOException: Pipe closed]" 오류 해결 방법은?
에러 핵심
Jenkins Publish Over SSH 플러그인이
SFTP 채널을 열어야 하는 시점(connect or change directory)에
대상 서버가 세션/파이프를 먼저 닫아 버려
Pipe closed 가 떨어집니다.
원인 90 % 는 계정·권한·셸·SFTP 서브시스템 문제, 10 % 는 네트워크/버그입니다.
Jenkins Publish Over SSH 플러그인이
SFTP 채널을 열어야 하는 시점(connect or change directory)에
대상 서버가 세션/파이프를 먼저 닫아 버려
Pipe closed 가 떨어집니다.
원인 90 % 는 계정·권한·셸·SFTP 서브시스템 문제, 10 % 는 네트워크/버그입니다.
-
Jenkins 쪽(발신) – 무조건 먼저
-
credential 재확인
-
Jenkins > Manage > Manage Credentials
→ Key 방식만 남기고 password/keyboard-interactive 체크 해제 -
개인키는 OpenSSH PKCS#8 (-----BEGIN OPENSSH PRIVATE KEY-----)
Putty(.ppk) 변환·수작업 업로드 금지
-
-
Publish Over SSH > 고급
-
“Verbose output” 체크 → 콘솔에서 sftp> ... 까지 보이는지 확인
-
“Timeout(ms)” 300 000(5분) 이상으로 증가
-
“Retries” 0 으로 두어 재시도 없이 한 번만 연결
-
-
Pipeline 을 쓴다면groovy
sshPublisher(publishers: [sshPublisherDesc( configName: 'prod', transfers: [sshTransfer(sourceFiles: 'target/*.jar', removePrefix: 'target', remoteDirectory: '/opt/app')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
-
-
대상 서버(수신) 필수 체크bash
# 1. 계정 홈 존재 & 권한 grep jenkins /etc/passwd ls -ld /home/jenkins /home/jenkins/.ssh # 2. SFTP 서브시스템 살아 있는가 grep -i sftp /etc/ssh/sshd_config # Subsystem sftp /usr/lib/openssh/sftp-server ← 주석 풀렸는지 # 3. 로그인 셸이 /bin/bash (nologin, /bin/false 이면 SFTP 안 됨) chsh -s /bin/bash jenkins # 4. 홈 디렉터리 소유자/권한 chown jenkins:jenkins /home/jenkins chmod 700 /home/jenkins chmod 600 /home/jenkins/.ssh/authorized_keys-
/opt, /data 등 업로드 경로도
jenkins 계정이 쓰기 가능한지 반드시 확인
(sudo -u jenkins touch /opt/app/test)
-
-
서버 방화벽/보안 모듈
-
fail2ban, denyhosts 에 IP 가 찍혀 있으면 연결 직후 끊김
-
/var/log/secure, /var/log/auth.log 마지막 줄 확인 → “Connection closed”, “Invalid user”, “Broken pipe” 등 있으면 차단 해제
-
-
SFTP 서브시스템 버그 회피 (OpenSSH 8.8 p1 이상) Jenkins Publish Over SSH 1.24 이하는 rsa-sha2-512 를 못 받음
→ 대상 서버 /etc/ssh/sshd_config 에 임시로 추가PubkeyAcceptedAlgorithms +ssh-rsa HostkeyAlgorithms +ssh-rsa후 systemctl restart sshd
(보안상 권장 X , 장기적으로는 Jenkins-플러그인·Java-버전 업그레이드) -
네트워크/MTU/방화벽
-
Jenkins 에이전트 ↔ 대상 22 포트 단일 세션에서
df -h 정도 출력하면 끊기면 MTU 문제일 수 있음
→ Jenkins 쪽 SSH config 에Host target IPQoS 0x00 ServerAliveInterval 60
-
-
우회(권장) Publish Over SSH 가 예전 플러그인이라 SFTP 버그 많음
Pipeline 에서는 sshPublisher 대신groovysh 'scp -i ~/.ssh/id_rsa target/*.jar jenkins@target:/opt/app/'또는groovysshagent(['jenkins-key']) { sh 'sftp -b - jenkins@target <<< "cd /opt/app\n put target/*.jar\n bye"' }로 바꾸면 99 % 해결
요약
“Pipe closed” 는 서버가 SFTP 채널을 열기 전에 세션을 끊었다는 뜻.
“Pipe closed” 는 서버가 SFTP 채널을 열기 전에 세션을 끊었다는 뜻.
-
Jenkins credential → 키 1개, verbose on
-
대상 계정 홈·권한·쓰기 경로·셸·Subsystem-sftp 확인
-
방화벽·fail2ban·OpenSSH 8.8 알고리즘 불일치 제거
-
여전히 실패하면 pipeline 에서 scp or sftp 직접 호출으로 우회
728x90
'컴퓨터 활용(한글, 오피스 등) > 기타' 카테고리의 다른 글
| Jenkins에서 publickey 문제 (0) | 2025.10.02 |
|---|---|
| PuTTY를 사용하여 서버에 접속할 때 publickey 문제 (0) | 2025.10.02 |
| jenkins에서 "build.xml: com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT 2 Too many authentication failusers" 오류 해결 방법은? (0) | 2025.10.01 |
| 국가정보자원관리원 서비스 운영에 대하여(DR센터) (0) | 2025.10.01 |
| IT 보안의 기본 법률 체계 (0) | 2025.09.30 |