SSH ControlMaster 원격 Mac은 어떻게 설정할까? 2026 다중 세션 가이드

SSH ControlMaster 원격 Mac은 어떻게 설정할까? 2026 다중 세션 가이드

원격 Mac에 명령을 여러 번 보낼 때마다 SSH 연결이 새로 열리고 있나요?

빠른 해법: OpenSSH의 SSH ControlMaster와 ControlPersist를 설정하면 조건에 맞는 SSH 연결을 재사용할 수 있습니다. 단, ControlPath를 연결별로 구분하고 현재 사용자만 접근할 수 있게 해야 합니다. 연결 재사용은 전송 연결을 공유하는 기능이지, 접속이 끊긴 뒤 원격 작업을 계속 실행하는 기능은 아닙니다.

이 글은 여러 SSH 명령과 파일 전송, 빌드 작업을 원격 Mac에서 실행하는 개발자와 DevOps 엔지니어를 위한 안내입니다.
공유 Mac 노드를 관리한다면 소켓 권한, 사용자 분리, 연결 종료 절차를 중점적으로 확인하세요.

연결 설정 전에 확인할 항목과 재사용의 경계

먼저 로컬 OpenSSH 클라이언트가 사용하는 설정과 원격 Mac의 로그인 권한을 확인합니다. OpenSSH 옵션의 동작은 설치된 버전의 매뉴얼과 실제 테스트 결과를 기준으로 판단해야 합니다. 기본값이나 특정 버전의 동작을 모든 환경에 그대로 적용하지 마세요.

macOS에서는 시스템 설정의 원격 로그인이 켜져 있어야 SSH 또는 SFTP 접속을 받을 수 있습니다. 허용된 사용자 범위도 점검해야 합니다. Apple의 Mac 원격 로그인 설정 안내는 원격 로그인 활성화와 사용자 접근 설정을 설명합니다.

연결 공유는 하나의 SSH 전송 연결 위에서 여러 채널을 다루는 방식입니다. RFC 4254의 SSH 연결 프로토콜은 이 연결 계층과 채널의 관계를 설명합니다. 따라서 다음 항목은 별도로 판단해야 합니다.

  • SSH 클라이언트 연결을 재사용할 수 있는가
  • 연결이 끊겼을 때 원격 명령이 계속 실행되는가
  • 실행 중인 빌드를 재접속 후 이어서 조작할 수 있는가

첫 번째가 ControlMaster의 범위입니다. 나머지는 별도의 작업 유지 및 복구 설계가 필요합니다.

SSH ControlMaster는 어떻게 설정해야 연결을 재사용할까요?

아래 설정은 예시입니다. 호스트명, 계정명, 포트는 실제 환경에 맞는 값으로 바꾸세요. 먼저 소켓 디렉터리를 만들고 현재 사용자만 접근하도록 제한합니다.

install -d -m 700 ~/.ssh/cm

로컬의 ~/.ssh/config에 원격 Mac 전용 항목을 추가합니다.

Host mac-build
    HostName <원격-Mac-호스트명>
    User <원격-계정>
    Port <SSH-포트>
    ControlMaster auto
    ControlPath ~/.ssh/cm/%C
    ControlPersist 10m

ControlMaster는 연결 공유를 시작하거나 기존 연결을 활용할지 정합니다. ControlPath는 공유 소켓의 위치를 지정합니다. 위 예시의 %C는 접속 정보에 따라 만든 해시를 경로에 넣으므로, 호스트·포트·원격 계정이 다른 연결이 같은 소켓 이름을 쓰는 일을 줄입니다. ControlPersist는 처음 연결한 클라이언트가 끝난 뒤 마스터 연결을 유지하는 시간을 지정합니다. 옵션별 세부 동작은 OpenSSH ssh_config 매뉴얼에서 설치 버전에 맞춰 확인하세요.

옵션 담당하는 일 설정에서 확인할 점
ControlMaster 공유 연결의 시작과 재사용 방식을 선택합니다 auto가 현재 클라이언트에서 지원되는지 확인합니다
ControlPath 공유 소켓 경로를 정합니다 연결별 구분과 디렉터리 접근 권한을 함께 점검합니다
ControlPersist 최초 클라이언트 종료 후 마스터 연결을 유지합니다 10m은 예시 설정이며, 필요한 유지 시간으로 조정합니다

설정 파일에 같은 Host 패턴이 여러 번 있거나 더 넓은 패턴이 먼저 매칭되면 예상과 다른 값이 적용될 수 있습니다. 다음 명령으로 최종 적용값을 확인합니다.

ssh -G mac-build

출력에서 controlmaster, controlpath, controlpersist 항목을 살펴보세요. HostName, User, Port도 실제 연결 대상과 일치해야 합니다.

원격 Mac의 여러 명령은 어떻게 같은 연결을 쓸까요?

설정을 저장한 뒤 첫 명령으로 마스터 연결을 엽니다.

ssh mac-build 'pwd'

이후 같은 호스트 별칭과 사용자 설정으로 명령을 실행합니다.

ssh mac-build 'git -C <저장소-경로> status'
scp <로컬-파일> mac-build:<원격-경로>

scp도 SSH 접속 설정을 이용하므로 같은 별칭과 매칭 조건을 사용해야 재사용 대상이 될 수 있습니다. 단, 옵션이나 별도 설정으로 다른 호스트·계정·포트를 지정하면 기존 소켓과 일치하지 않을 수 있습니다. OpenSSH scp 매뉴얼에서 현재 클라이언트의 전송 동작과 옵션을 확인하세요.

작업 재사용을 위한 조건 검증할 점
두 번째 SSH 명령 같은 별칭과 접속 정보 사용 마스터 상태와 명령 결과를 함께 확인합니다
파일 전송 SSH 설정 매칭이 같아야 합니다 전송 경로와 계정이 예상한 값인지 확인합니다
원격 빌드 빌드 명령이 원격에서 실행됩니다 연결 공유만으로 단절 후 빌드 지속을 보장하지 않습니다

마스터 상태는 다음처럼 확인할 수 있습니다.

ssh -O check mac-build

성공 응답은 해당 별칭의 마스터 연결이 응답했다는 뜻입니다. 이 결과만으로 파일 전송 완료, 빌드 성공, 단절 이후 작업 지속까지 입증되지는 않습니다. 각 작업의 종료 상태와 로그를 별도로 확인하세요.

병렬 호출에서는 소켓과 계정을 어떻게 분리할까요?

여러 터미널, 자동화 스크립트, 저장소가 같은 Mac을 호출하면 사용자와 연결 조건이 뒤섞일 수 있습니다. ControlPath가 겹치면 서로 다른 접속이 소켓을 공유하려고 시도할 수 있고, 소켓 디렉터리를 다른 계정이 쓸 수 있으면 의도하지 않은 연결 제어 위험이 생깁니다.

다음 조건을 기준으로 구성을 선택하세요.

  • 호스트·포트·계정별로 연결이 분리되고 소켓 디렉터리 접근도 현재 사용자로 제한된다면: %C를 포함한 전용 ControlPath를 사용합니다.
  • 같은 호스트 별칭을 여러 계정이나 자동화 작업이 공유한다면: 계정별 SSH 설정과 소켓 디렉터리를 나누고, 허용된 계정만 접근하도록 합니다.
  • 공유 노드에서 계정별 접근을 감사해야 한다면: 필요한 명령과 계정만 허용하는 정책을 우선합니다. 서버 측 로그인 제한은 OpenSSH sshd_config 매뉴얼과 실제 서버 설정을 대조합니다.
  • 연결 식별이나 권한 경계를 확실히 보장할 수 없다면: 해당 작업에서는 연결 공유를 끄고 일반 SSH 연결로 되돌립니다.
병렬 작업 상황 권장 판단 되돌릴 조건
한 사용자, 여러 터미널 사용자 전용 소켓 경로를 공유합니다 상태 확인이 실패하거나 소켓이 다른 연결을 가리키면 재접속합니다
서로 다른 계정 계정마다 설정과 소켓 경로를 분리합니다 계정 경계를 확인할 수 없으면 공유를 끕니다
자동화 작업과 대화형 작업 혼합 로그와 종료 상태를 각 작업에서 따로 기록합니다 작업 추적이 불가능하면 호출을 순차화합니다

ControlPersist가 끝나면 연결은 언제 닫히나요?

예시 설정의 10m은 연결이 유휴 상태로 남을 수 있는 시간을 지정한 것입니다. 모든 환경에서 같은 기본값이 적용된다는 뜻은 아닙니다. 실제로 설정한 값과 클라이언트 버전의 매뉴얼을 확인하세요. ControlPersist는 원격 명령을 백그라운드 작업으로 바꾸거나, 네트워크가 끊긴 뒤 명령을 복구하지 않습니다.

상태 가능한 조치 주의점
클라이언트 명령이 끝났지만 마스터가 응답함 ssh -O check mac-build로 상태를 확인합니다 상태 확인은 작업 성공 확인과 다릅니다
마스터 연결이 응답하지 않음 기존 연결 종료 여부를 확인한 뒤 새 SSH 연결을 시도합니다 실행 중인 작업을 자동 복구한다고 가정하지 않습니다
원격 Mac이 오프라인임 호스트 접근이 복구된 뒤 새 연결을 엽니다 이전 명령의 재실행 여부를 로그와 작업 상태로 판단합니다

마스터를 닫기 전에는 같은 소켓을 이용 중인 다른 세션이 없는지 확인합니다. 종료가 안전하다고 판단되면 다음 명령을 사용합니다.

ssh -O exit mac-build

이 명령은 별칭에 연결된 마스터를 종료하도록 요청합니다. 단절된 연결 때문에 오래된 소켓이 남았다고 해서 곧바로 삭제하지 마세요. 먼저 ssh -O check로 상태를 확인하고, 다른 세션에서 사용 중이지 않은지 확인한 뒤 정리해야 합니다. 정리 후에는 새 연결을 열어 재접속과 작업 재실행 절차를 검증합니다.

실제 개발 작업으로 최종 검수하기

운영에 넣기 전에는 다음 순서로 확인합니다.

  1. ssh -G mac-build 출력에서 실제 호스트, 사용자, 포트, 공유 옵션을 확인합니다.
  2. ssh mac-build 'pwd'로 최초 연결을 엽니다.
  3. ssh -O check mac-build로 마스터 연결이 응답하는지 확인합니다.
  4. 같은 별칭으로 두 번째 SSH 명령을 실행하고 종료 상태와 결과를 기록합니다.
  5. scp로 시험 파일을 전송한 뒤 원격 경로와 파일 내용을 확인합니다.
  6. 실제 빌드 명령을 실행하고, 정상 종료와 연결 단절 상황에서 로그와 재실행 절차를 확인합니다.

검수 기록에는 클라이언트 버전, 원격 로그인 권한, 사용 계정, 적용된 설정, 연결 재사용 확인 결과, 실패 시 복구 절차를 남깁니다. 여기서 연결 재사용에 성공해도 빌드 작업의 단절 후 지속성은 별도 검수 항목입니다. 해당 작업에 필요한 실행 유지 방식과 재실행 안전성을 따로 설계하세요.

현재 방식이 개인 Mac의 SSH 설정과 Linux 클라우드 호스트에 의존한다면 macOS 전용 도구 체인을 사용할 수 없거나, 장비 관리와 접근 정책을 직접 운영해야 하는 부담이 남습니다. 반대로 장기간 고정된 고부하 작업이나 물리 장치 연결이 필요하다면 임대보다 직접 보유한 Mac이 적합할 수 있습니다. 필요한 기간에만 원격 macOS 환경을 쓰려는 경우에는 SFTPMAC의 맥 미니 임대 요금 안내를 비교하고, 작업 지역이 중요하다면 서울 맥 미니 이용 안내도 확인할 수 있습니다. 어느 쪽이든 먼저 SSH 접근 권한과 작업 복구 요구를 정리한 뒤 환경을 선택하는 편이 안전합니다.