피드로 돌아가기
Dev.toInfrastructure
원문 읽기
/bin/sh -c 래핑과 정적 분석 도입을 통한 SSH 쉘 호환성 문제 완전 해결
When SSH commands hit a csh login shell — wrapping every command in /bin/sh -c across the codebase
AI 요약
Context
Paramiko 라이브러리의 exec_command가 서버의 기본 로그인 쉘을 사용함에 따라 발생하는 구문 호환성 문제 분석. 특히 csh/tcsh 환경에서 Bourne shell 기반의 리다이렉션(2>/dev/null) 및 제어문이 해석되지 않아 명령어가 실패하는 병목 지점 확인.
Technical Solution
- 모든 SSH 명령어를 /bin/sh -c '...' 형태로 래핑하여 사용자 로그인 쉘 종류와 무관하게 POSIX sh 표준 해석기 강제 지정
- shlex.quote를 통한 명령어 인자 이스케이프 처리로 쉘 인젝션 방지 및 구문 무결성 확보
- 개별 API 포인트의 수동 수정을 배제하고 _safe_run이라는 단일 Helper 함수로 SSH 실행 로직을 추상화하여 일관성 유지
- site_manager_web.py 내 c.run() 호출부를 전수 조사하는 정적 분석 테스트 코드를 CI 파이프라인에 추가
- sh-shaped syntax가 포함된 raw c.run() 호출 시 빌드를 실패시키는 Regression Test 구조 설계
실천 포인트
- 외부 서버 명령 실행 시 기본 쉘(Default Shell) 가정을 배제하고 명시적 쉘 지정 여부 확인 - 특정 지점의 버그 수정 후 동일 패턴의 코드 전수 조사를 위한 Cross-grep 수행 - 인간의 실수(Human Error)를 방지하기 위해 금지된 코드 패턴을 감지하는 정적 분석 테스트 도입