2026원격 MacCISSHControlMasterControlPersistrsyncSFTPkeepalive

2026 원격 Mac CI: SSH ControlMaster·ControlPersist·장시간 rsync/SFTP와 keepalive 의사결정 매트릭스

GitHub Actions가 원격 Mac으로 푸시할 때 지연은 대역폭보다 SSH 핸드셰이크 비용인 경우가 많습니다. 다중화는 병렬·NAT·체크섬 게이트와 함께 설계해야 합니다.

ControlMasterControlPersist원격 MacrsyncCIkeepalive
2026 원격 Mac CI SSH ControlMaster rsync SFTP keepalive

2026 원격 Mac CI에서 ControlMaster와 장시간 rsync/SFTP

GitHub Actions가 원격 Mac으로 아티팩트를 밀어 넣을 때 가장 흔한 오판은 대역폭 부족입니다. 실제로는 DNS, TCP, SSH 키 교환, 인증, 채널 설정이 짧은 잡을 고빈도로 반복하면 바이트 전송보다 먼저 벽이 됩니다. ControlMaster는 마스터 소켓을 재사용해 재협상 비용을 줄이지만 동일 ControlPath를 나눠 쓰는 병렬 rsync는 SSH 계층에서 직렬화되어 처리량 곡선이 톱니 모양이 됩니다.

NAT나 로드밸런서 유휴 타이머는 다중화로 사라지지 않습니다. 대용량 아카이브를 로컬에서 묶는 동안 애플리케이션 바이트가 흐르지 않으면 중간 장비가 상태를 버립니다. ServerAliveIntervalClientAliveInterval을 더 엄격한 쪽에 맞추고 마지막 바이트 시각과 로그를 대조하세요.

known_hosts와 IPv6 흔들림은 재사용해도 남습니다. AAAA가 바뀌면 첫 실패가 마스터 상태에 영향을 주므로 환경별 Host 별칭을 나누고 지문을 문서화합니다. 사람용 SFTP와 CI 전송은 Linux 사용자나 별칭으로 분리해 디버깅 중 ssh -O exit가 프로덕션 업로드를 건드리지 않게 합니다.

관측의 세 층

L1은 연결, L2는 다중화 적중률과 마스터 수명, L3은 rsync 속도와 checksum 게이트 종료 코드입니다. L1·L2가 불안정한데 L3만 다듬어도 효과는 제한적입니다. MaxSessionsMaxStartups는 병렬 SFTP 글과 같은 대시보드에서 추적하고 러너 출구 NAT 재사용 주기도 함께 적습니다.

수치와 NAT

대륙 간 핸드셰이크 120~400ms는 흔하며 분당 10회 짧은 동기화면 매시간 수 분의 오버헤드가 됩니다. 다중화 적중 후 재시작은 밀리초대로 내려가도 단일 TCP 흐름 한계는 암호화와 혼잡 제어에 묶입니다. NAT 300/600/900초 창에 맞춰 ServerAliveInterval 30ServerAliveCountMax 4를 기준선으로 삼고 원격 Mac의 ClientAliveInterval보다 엄격한 쪽을 택합니다. 거대 tarball은 디스크 쓰기가 지배적이므로 단계적 checksum 설계가 우선입니다.

결정 매트릭스

상황방침이점리스크
작은 증분 다수ControlMaster auto + 짧은 ControlPersist꼬리 지연 감소마스터 손상 시 복구 절차
높은 매트릭스 병렬ControlPath 분리 또는 비활성직렬화 완화핸드셰이크 비용
장시간 전송+게이트전용 CI 계정재연결 감소keepalive 필수
사람과 CI 공유Host와 경로오조작 감소설정 가지 증가
엄격 컴플라이언스persist 단축 또는 off노출 시간CPU 부담

절차

# ~/.ssh/config 예
# Host rm-ci
#   HostName remote.mac.example
#   User ciupload
#   IdentityFile ~/.ssh/id_ed25519_ci
#   ControlMaster auto
#   ControlPath ~/.ssh/cm/%r@%h:%p
#   ControlPersist 10m
#   ServerAliveInterval 30
#   ServerAliveCountMax 6
#   ConnectTimeout 15

1단계: multiplex 없이 동일 rsync를 세 번 측정합니다.

2단계:ControlMaster auto와 권한이 제한된 ControlPath를 추가합니다.

3단계: 매트릭스 충돌 시 계정·포트·하위 디렉터리로 ControlPath를 나눕니다.

4단계:ServerAliveIntervalClientAliveInterval을 NAT보다 짧게 맞추고 병렬 SFTP 글과 교차 검증합니다.

5단계:known_hostsStrictHostKeyChecking를 러너 이미지에 고정합니다.

6단계:partial과 SHA256 게이트를 마스터 재생성에도 멱등하게 만듭니다.

7단계:multiplex 없는 Host 별칭을 비상 스위치로 문서화합니다.

관련 읽기

순서: 본문→known_hosts병렬 SFTPIPv6무결성.

FAQ와 매니지드 Mac

ControlPersist 길이?

잡 주기와 보안 정책에 맞춰 런북에 기록하고 로컬 ~/.ssh 임의 변경을 금지에 가깝게 다룹니다.

ProxyJump?

가능하나 ControlPath로 직행과 점프를 구분합니다.

정리:ControlMaster는 핸드셰이크 세금 완화이며 병렬·NAT·세션 한도·게이트와 함께 설계하고 비활성 경로를 남기십시오.

한계:DNS나 듀얼 스택, 기업 프록시가 불안정하면 L1 문제이며 다중화는 실패만 가속합니다.

대비:SFTPMAC 상시 원격 Mac은 안정 입구·keepalive 기본값·권한 경계를 제품화해 야간 NAT 로그 추적을 줄입니다.

다중화·keepalive·지문을 분기 회귀에 포함.