새로 포맷한 맥북, 쓰던 맥에서 Tailscale로 원격 셋업하는 7단계 (SSH 키 등록부터 Homebrew까지)
이 글과 연결된 글 보기
드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.표시된 글 19편 목록
새로 포맷한 맥북을 셋업할 때, 새 맥 앞에 앉아 프로그램을 하나씩 받을 필요는 없습니다. 쓰던 맥과 새 맥을 Tailscale로 묶고 SSH만 열어 두면, 나머지 설치는 쓰던 맥에서 원격으로 돌릴 수 있습니다. 이 글은 실제로 M4 맥북을 포맷한 뒤 쓰던 맥에서 원격 셋업하면서 세 번 막혔던 지점과 그 해결법을 7단계로 정리했습니다.
이 글은 이런 분께 필요합니다
- 맥을 두 대 이상 쓰고 있고, 새로 포맷한 맥을 쓰던 맥에서 원격으로 세팅하고 싶은 분
- Claude Code, Codex 같은 AI 에이전트에게 새 맥 셋업을 맡기고 싶은 분 (에이전트는 SSH로 들어가야 일을 할 수 있습니다)
- 새 맥 터미널에 긴 명령어를 따라 치기 번거로운 분
준비물은 다음과 같습니다.
- 두 맥 모두 같은 Tailscale 계정(같은 tailnet)에 로그인된 상태
- 새 맥의 관리자 계정 비밀번호 (Homebrew 설치 때 한 번 필요합니다)
- 쓰던 맥에 SSH 키 한 쌍 (
~/.ssh/id_ed25519.pub가 없으면 Step 4에서 만듭니다)
아래 명령어와 결과는 2026년 11월 2일, 새 맥 M4 맥북(macOS 26.6.2)과 쓰던 맥(macOS)으로 직접 실행한 기록입니다. 예시 주소는 새 맥 100.115.0.20, 쓰던 맥 100.101.0.10, 새 맥 계정은 newmac으로 바꿔 적었습니다. 본인 주소와 계정으로 바꿔서 쓰세요.
먼저 알아둘 것: Tailscale 연결과 SSH 접속은 별개입니다
Tailscale은 내 기기끼리만 통하는 사설망을 만들어 줍니다. 로그인한 기기마다 100.으로 시작하는 주소가 붙고, 집과 사무실처럼 다른 네트워크에 있어도 이 주소로 서로 닿습니다.
여기서 헷갈리기 쉬운 점이 있습니다. Tailscale은 길을 열어 줄 뿐이고, 그 길 끝에서 문을 열어 주는 건 맥 자신입니다. 새 맥의 원격 로그인(SSH)이 꺼져 있으면, Tailscale 연결이 멀쩡해도 접속은 거절됩니다. 이번 셋업에서도 핑은 처음부터 됐지만 SSH는 두 번 더 막혔습니다.
Step 1. 두 맥이 같은 tailnet에 있는지 확인합니다
쓰던 맥 터미널에서 Tailscale 기기 목록을 봅니다. 맥 앱으로 설치했다면 CLI는 앱 안에 있습니다.
/Applications/Tailscale.app/Contents/MacOS/Tailscale status
목록에 새 맥이 보이면 그 주소로 핑을 보냅니다.
ping -c 2 100.115.0.20
응답이 오면 길은 열린 겁니다. 목록에 새 맥이 없으면 새 맥에서 Tailscale 앱을 설치하고 같은 계정으로 로그인합니다. 기기 이름도 눈여겨보세요. 이번에 새 맥은 caramel-popcorn-macbookpro로 보였는데, 이 이름이 나중에 계정 이름을 짐작하는 단서가 됐습니다.

Tailscale 기기 목록에 새 맥이 보이고 핑도 응답하지만, 22번 포트는 닫혀 있습니다. 주소는 예시로 바꿨습니다.
Step 2. 22번 포트로 SSH가 열려 있는지 확인합니다
SSH는 22번 포트를 씁니다. 쓰던 맥에서 포트가 열려 있는지 먼저 봅니다.
nc -z -G 3 100.115.0.20 22 && echo "열림" || echo "닫힘"
결과는 두 가지로 갈립니다.
| 결과 | 뜻 | 할 일 |
|---|---|---|
Connection refused / 닫힘 | 새 맥의 원격 로그인이 꺼져 있음 | Step 3 |
| 열림 | 원격 로그인은 켜져 있음 | Step 4 |
이번에는 핑은 되는데 Connection refused가 나왔습니다. 원격 로그인이 꺼져 있다는 뜻입니다.
Step 3. 새 맥에서 원격 로그인을 켭니다
새 맥에서 시스템 설정 > 일반 > 공유 > 원격 로그인을 켭니다. 오른쪽 (i) 버튼을 눌러 접근 허용을 "모든 사용자" 또는 내 계정으로 둡니다.
처음에는 새 맥 터미널에서 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist로 켜 보려 했지만, 22번 포트는 계속 닫혀 있었습니다. 설정 화면에서 원격 로그인 토글을 켠 뒤에야 Step 2의 확인 명령이 "열림"으로 바뀌었습니다.
다시 Step 2 명령을 돌려 "열림"이 나오면 다음 단계로 갑니다.
Step 4. 공개키를 줄 깨짐 없이 등록합니다
비밀번호 없이 들어가려면, 쓰던 맥의 공개키를 새 맥의 ~/.ssh/authorized_keys에 넣어야 합니다. 공개키는 이름 그대로 남에게 보여 줘도 되는 쪽 키입니다. id_ed25519처럼 .pub가 없는 파일(개인키)은 절대 옮기지 마세요.
쓰던 맥에 키가 없다면 먼저 만듭니다.
ls ~/.ssh/id_ed25519.pub || ssh-keygen -t ed25519
여기서 두 번째로 막혔습니다
공개키는 ssh-ed25519 AAAA...로 시작하는 100자 가까운 한 줄입니다. 처음에는 이 키를 넣는 긴 명령을 새 맥 터미널에 옮겨 치는 방식으로 안내했는데, 포트가 열린 뒤에도 접속이 계속 거절됐습니다. 나중에 확인해 보니 새 맥에는 authorized_keys 파일 자체가 없었습니다. 긴 명령을 다른 기기로 옮겨 치는 과정에서 키 등록이 아예 이뤄지지 않은 겁니다.
[email protected]: Permission denied (publickey,password,keyboard-interactive).
이 메시지는 두 가지 경우에 똑같이 나옵니다.
- 공개키가 제대로 안 들어갔을 때 (붙여넣다 줄이 끊기거나 일부가 빠진 경우)
- 계정 이름을 틀렸을 때
SSH 서버는 보안상 "그런 계정은 없다"고 알려 주지 않기 때문에, 쓰던 맥에서는 둘을 구분할 수 없습니다. 새 맥에서 whoami로 계정 이름을 확인해야 합니다. 맥 계정 이름은 처음 셋업할 때 입력한 이름에서 자동으로 만들어져서, 생각한 이름과 다를 수 있습니다.
해결: 쓰던 맥에서 키를 띄우고, 새 맥에서는 짧은 한 줄만 칩니다
긴 키를 옮기는 대신, 쓰던 맥이 Tailscale 사설망 안에서만 공개키 파일을 잠깐 내려 주게 합니다. 쓰던 맥에서 실행합니다.
mkdir -p /tmp/kshare && cp ~/.ssh/id_ed25519.pub /tmp/kshare/key
cd /tmp/kshare && python3 -m http.server 18790
새 맥 터미널에서는 이 한 줄만 칩니다. 100.101.0.10은 쓰던 맥의 Tailscale 주소입니다.
mkdir -p ~/.ssh; curl -s 100.101.0.10:18790/key >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys; whoami
마지막에 찍히는 whoami 값이 접속할 계정 이름입니다. 등록이 끝나면 쓰던 맥에서 Ctrl+C로 서버를 끕니다.
이 방법이 괜찮은 이유는 세 가지입니다.
- 키를 사람이 옮기지 않으니 줄이 깨질 일이 없습니다.
- 내려 주는 파일은 공개키뿐이고, Tailscale 주소는 내 기기끼리만 닿습니다.
- 명령이 짧아서 새 맥 앞에서 손으로 쳐도 됩니다.
curl -s "100.101.0.10:18790/key?u=$(whoami)"처럼 주소 뒤에 계정 이름을 붙여 요청하면, 쓰던 맥의 서버 로그에 새 맥 계정 이름이 같이 찍힙니다. 이번에는 새 맥에서 결과를 보내 주기 어려워서 이 방식으로 계정 이름을 받았습니다.
Step 5. 쓰던 맥에서 접속을 확인하고 별칭을 만듭니다
비밀번호를 묻지 않고 계정 이름, macOS 버전, 칩 종류, 디스크 여유가 나오면 성공입니다. 이번에는 arm64, macOS 26.6.2, 여유 885GB가 나왔습니다.

키 등록 뒤 비밀번호 없이 바로 들어가 새 맥 정보를 읽었습니다.
매번 주소를 치기 싫다면 쓰던 맥의 ~/.ssh/config에 별칭을 둡니다.
Host newmac
HostName 100.115.0.20
User newmac
이제 ssh newmac만으로 들어갑니다.
Step 6. Homebrew는 설치 창(pkg)으로 깝니다
Homebrew는 설치할 때 관리자 비밀번호를 한 번 물어봅니다. SSH로는 그 비밀번호를 대신 넣을 수 없어서, 이 단계만은 새 맥 앞에서 해야 합니다.
여기서 세 번째로 막혔습니다
새 맥에서 공식 설치 스크립트를 파이프로 실행하는 짧은 명령을 시도했는데, 설치가 끝나지 않고 종료돼 /opt/homebrew가 생기지 않았습니다. 터미널에서는 비밀번호를 쳐도 화면에 아무것도 안 보이고 "Press RETURN" 같은 안내도 지나가 버려서, 새 맥 앞에 있는 사람은 어디서 멈췄는지 알기 어렵습니다.
해결: 쓰던 맥에서 pkg를 받아 새 맥 화면에 설치 창을 띄웁니다
Homebrew는 일반 맥 앱처럼 설치하는 Homebrew.pkg도 공식 배포합니다. 쓰던 맥에서 SSH로 새 맥에 최신 pkg를 내려받고 바로 엽니다.
ssh newmac 'cd ~/Downloads && U=$(curl -s https://api.github.com/repos/Homebrew/brew/releases/latest | grep -o "https://[^\"]*\.pkg" | head -1) && curl -sL -o Homebrew.pkg "$U" && open Homebrew.pkg'
새 맥에 로그인된 화면이 있으면 설치 창이 그 화면에 뜹니다. 새 맥 앞에서는 계속 > 설치를 누르고, 비밀번호 창에 로그인 비밀번호만 넣으면 끝입니다. 이번에는 Homebrew 7.0.12가 설치됐습니다.
설치가 끝났는지는 쓰던 맥에서 확인합니다.
ssh newmac '/opt/homebrew/bin/brew --version'
pkg 설치 뒤에도 새 맥에서 xcode-select -p는 "active developer directory"가 없다는 오류를 냈습니다. Homebrew가 미리 빌드된 패키지(bottle)를 받는 데는 지장이 없었지만, 소스에서 빌드해야 하는 프로그램이나 Xcode가 필요한 작업을 하려면 새 맥에서 xcode-select --install을 한 번 실행해 주세요.
Step 7. 쓰던 맥의 설치 목록을 뽑아 원격으로 설치합니다
먼저 쓰던 맥에서 지금 깔려 있는 목록을 뽑습니다.
brew leaves # 직접 설치한 CLI 도구
brew list --cask # 앱과 폰트
npm ls -g --depth=0 # 전역 npm 도구
ls /Applications # brew 밖에서 설치한 앱까지 확인
이 목록을 그대로 다 옮기면 쓰지 않는 도구까지 따라옵니다. 이번에는 매일 쓰는 것만 골라 설치 스크립트로 묶었습니다.
#!/bin/bash
export PATH=/opt/homebrew/bin:$PATH
export HOMEBREW_NO_AUTO_UPDATE=1
brew install $f && echo "ok $f" || echo "FAIL $f"
done
for c in google-chrome visual-studio-code cursor warp raycast rectangle slack notion obsidian font-pretendard; do
brew install --cask $c && echo "ok cask $c" || echo "FAIL cask $c"
done
grep -q 'brew shellenv' ~/.zprofile 2>/dev/null || echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
쓰던 맥에서 새 맥으로 보내고 실행합니다. 한 줄씩 ok/FAIL이 찍혀서 무엇이 실패했는지 바로 보입니다.
scp setup-newmac.sh newmac:~/
ssh newmac 'bash ~/setup-newmac.sh 2>&1 | tee ~/setup-newmac.log'
몇 가지는 원격으로 끝까지 깔리지 않으니 새 맥에서 직접 하는 편이 낫습니다.
- 비밀번호를 묻는 pkg형 앱: Docker Desktop, 가상 오디오 장치(BlackHole)처럼 설치 중 관리자 권한이 필요한 앱은 원격 스크립트에서 빼고 새 맥에서 직접 설치하도록 남겨 뒀습니다.
- App Store 앱: 카카오톡처럼 App Store에서 받는 앱은 새 맥에서 Apple ID로 로그인해야 합니다.
- 로그인이 필요한 앱: 설치는 원격으로 되지만, 앱 첫 실행과 계정 로그인은 새 맥에서 합니다.
막힐 때
| 증상 | 원인 | 해결 |
|---|---|---|
tailscale status에 새 맥이 없음 | 새 맥이 다른 계정으로 로그인했거나 앱이 꺼짐 | 새 맥에서 Tailscale 앱을 같은 계정으로 로그인 |
핑은 되는데 Connection refused | 새 맥의 원격 로그인이 꺼짐 | 시스템 설정 > 일반 > 공유 > 원격 로그인 켜기 (Step 3) |
Permission denied (publickey,...) | 공개키가 안 들어갔거나 계정 이름이 틀림 | 새 맥에서 whoami 확인, Step 4의 curl 방식으로 키 재등록 |
Homebrew 설치 명령을 실행했는데 /opt/homebrew가 없음 | 설치가 끝나지 않고 중간에 종료됨 | Step 6의 pkg 설치 창으로 설치 |
xcode-select: error: Unable to get active developer directory | Xcode 명령줄 도구 미설치 | 새 맥에서 xcode-select --install |
brew: command not found | 셸 PATH에 Homebrew가 없음 | echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile 후 터미널 재시작 |
정리
새 맥 앞에서 해야 하는 일은 딱 세 가지였습니다. 원격 로그인 켜기, 짧은 curl 한 줄 치기, Homebrew 설치 창에서 비밀번호 넣기. 나머지는 모두 쓰던 맥에서 SSH로 처리했습니다. 한 번 키를 등록해 두면 다음부터는 ssh newmac 한 줄로 들어가고, AI 에이전트에게 새 맥 작업을 맡기는 것도 같은 길로 됩니다.

