콘텐츠로 이동

시크릿 파일 동기화

age 암호화로 민감한 파일을 안전하게 동기화하는 방법

일부 설정 파일에는 SSH 키, API 토큰, 인증 정보처럼 git 저장소에 평문으로 올리면 안 되는 민감한 데이터가 들어있어요. Devsync는 이런 파일을 위해 secret 모드를 제공해요. 저장 전에 age로 암호화해요.


저장소가 공개될 경우 노출되면 곤란한 파일에는 --mode secret을 써요.

  • ~/.ssh/config — SSH 호스트 설정
  • ~/.aws/credentials — AWS 액세스 키
  • ~/.config/gh/hosts.yml — GitHub CLI 토큰
  • 인증 토큰이 포함된 ~/.npmrc
  • 실제 인증 정보가 담긴 .env 파일
  • API 키, 비밀번호, 개인 토큰이 담긴 모든 파일

시크릿이 없는 파일(편집기 설정, 셸 alias, 토큰 없는 .gitconfig)은 기본 normal 모드를 사용하면 돼요.


Devsync는 공개키 암호화 방식인 age를 사용해요.

  • 개인키 (AGE-SECRET-KEY-...): ~/.config/devsync/age/keys.txt에 저장돼요
  • 수신자(recipient): 파일 암호화에 사용되는 공개키(AGE1...)예요
  • push 시: secret 파일이 등록된 모든 수신자 공개키로 암호화돼요
  • pull 시: 암호화된 파일이 내 개인키로 복호화돼요

이 방식의 특징:

  • 개인키가 없으면 저장소에서 시크릿 파일 내용을 읽을 수 없어요
  • 공개키를 여러 개 추가해서 여러 기기에서 시크릿을 공유할 수 있어요

age 키는 devsync init 시 자동으로 생성돼요. 처음 시작이라면 키 입력 프롬프트에서 엔터만 누르면 새 키 쌍이 만들어져요.

Terminal window
devsync init
# → 엔터를 눌러 새 age 키를 생성해요

개인키는 ~/.config/devsync/age/keys.txt에 저장돼요.

초기화 시 기존 키를 제공할 수도 있어요.

Terminal window
devsync init --key AGE-SECRET-KEY-1...

또는 키 파일 경로를 지정할 수도 있어요.

Terminal window
devsync init --identity ~/path/to/key.txt

Terminal window
devsync track ~/.ssh/config --mode secret
devsync track ~/.aws/credentials --mode secret

push를 실행하면 암호화되어 저장소에 저장돼요.

Terminal window
devsync push

sync 디렉터리에는 .devsync.secret 확장자가 붙어서 저장돼요.

  • 디렉터리~/.config/devsync/sync/default/
    • 디렉터리.ssh/
      • config.devsync.secret
    • 디렉터리.aws/
      • credentials.devsync.secret

다른 기기에서 시크릿 파일 가져오기

섹션 제목: “다른 기기에서 시크릿 파일 가져오기”
  1. 기존 저장소와 백업해 둔 개인키로 새 기기에서 Devsync를 초기화해요.

    Terminal window
    devsync init https://github.com/yourname/dotfiles.git --key AGE-SECRET-KEY-1...
  2. 파일을 가져와요.

    Terminal window
    devsync pull

    시크릿 파일은 자동으로 복호화되어 로컬 경로에 저장돼요.


기기마다 별도의 age 키 쌍을 사용한다면, 공개키를 추가해서 어느 기기에서도 복호화할 수 있게 할 수 있어요.

Terminal window
# 새 기기의 공개키를 확인해요
cat ~/.config/devsync/age/keys.txt
# AGE-SECRET-KEY-... (개인키)
# 공개키는 init 시 출력되거나, 개인키에서 파생할 수 있어요
# 기존 기기에서 새 기기의 공개키를 수신자로 추가해요
devsync init --recipient AGE1xyz...newdevicepublickey...

공개키를 추가하고 다시 push하면 시크릿 파일이 두 키 모두로 암호화돼요.

Terminal window
devsync push

  • 파일 내용은 암호화되지만, 파일 이름과 경로는 저장소에 그대로 보여요
  • .devsync.secret 확장자로 해당 파일이 추적된 시크릿임은 알 수 있어도, 내용은 알 수 없어요
  • 공개 저장소에 시크릿 파일을 저장해도 내용 측면에서는 안전하지만, 경로 자체에서 설정 정보가 노출될 수 있다는 점을 고려하세요