본문 바로가기
Tips

github에서 비밀번호 숨기는 팁(--assume-unchanged)

by lovey25 2023. 2. 15.
반응형

github에 코드를 올릴 때 비밀번호 등 개인정보를 숨기고 업로드하는 팁입니다.

와이파이 모듈을 사용한 아두이노 프로젝트나 API를 사용하는 웹 프로젝트 등을 하다 보면 비밀번호나 API 토큰 등을 하드코딩 할 때가 있습니다. 그런데 이런 정보를 숨기지 않고 github에 그대로 푸시하면 내 개인정보가 만천하에 노출되게 됩니다.

그래서 저는 그동안 코드 푸시하기 전에 비민번호를 지우거나 다른 임의의 문자로 교체한 뒤에 업로드하기도 했는데, 그런데 이렇게 해 놓으면 다음 작업을 위해서는 또다시 원래 비번으로 돌려야 하고 푸시할 때는 또다시 임의 문자로 교체해야 하고... 그러다가 가끔 까먹고 그냥 올려서 비밀번호가 올라가 버리기도 하고. 정말 환장할 노릇입니다.

컴파일러에서 환경변수를 별도로 지원하는 경우에는 이를 이용해서 민감한 정보를 숨길 수 있습니다. 그런데 아두이노 프로젝트에서는 아직 방법을 찾지 못했습니다. 분명 무슨 방법이 있을 것 같은데...

아무튼 git 명령 중 assume-unchanged 옵션을 사용하는 팁입니다. 방법을 간단히 얘기하자면 민감한 정보는 별도의 파일에 모아서 따로 관리하고 이 파일은 git에서 감시하지 않도록 빼두는 겁니다. ".gitignore"에 등록하는 것과는 좀 다른 개념인데 바로 예시를 보면서 살펴보겠습니다.

다음과 같은 아두이노 코드를 가정해 보겠습니다.


#include <Arduino.h>
#include <ESP8266WiFi.h>

String ssid = "MYSSID";
String password = "MYPASSWORD";

void setup()
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
}

4, 5 행에 하드코딩된 SSID와 비번을 이용해서 11행에서 WIFI접속을 시도하는 코드입니다. 이 코드가 그대로 공개 저장소에 올라가면 내 무선 인터넷 비번인 "MYPASSWORD"가 노출됩니다. 

이럴 때 숨기고 싶은 문자는 별도 헤더파일을 만들어서 아래와 같이 따로 숨겨둡니다. "credentials.h"라는 이름으로 파일을 만들고 코드를 아래와 같이 작성했습니다. 만약 ".gitignore"에 등록해서 이 파일을 예외처리할 수 있겠지만 그렇게 하면 이 "credential.h" 자체에 수정이 필요할 때 불편함이 발생하기 때문에 ".gitignore" 등록은 비추인 것 같아요.

#ifndef CREDENTIALS_H
#define CREDENTIALS_H

#define SSID "YOURSSID"
#define PASSWD "YOURPASSWORD"

#endif

여기서 이 "credentials.h" 파일은 저장소에 올라갈 파일입니다. 따라서  SSID와 비번은 임의의 단어를 넣어줍니다. 그리고 코드는 아래와 같이 수정합니다.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "credentials.h"

String ssid = SSID;
String password = PASSWD;

void setup()
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
}

여기까지 준비작업이 끝났으면 github로 코드를 푸시합니다. 그러고 나서 작업을 해야 하는 로컬 저장소에서 다음 git 명령어로 "credentials.h"파일을 변경이 없는 것처럼 예외처리합니다.

git update-index --assume-unchanged ./credentials.h

이제 "credentials.h"파일에 실제로 사용하는 비밀번호로 고쳐서 작업을 계속하면 되겠습니다. 만약 이 파일에 수정이 필요할 경우에는 "--no-assume-unchaned" 옵션을 통해서 git이 파일을 다시 추적하도록 만든 다음 수정된 파일을 커밋하면 되겠습니다.

git update-index --no-assume-unchanged ./credentials.h

아래 캡처화면은 VSCode에서 --assume-unchanged 옵션에 따라서 git이 실시간으로 변경 내용을 추적하기도 하고 무시하기도 하는 모습을 보여주고 있습니다.

이렇게 하면 코드 구조는 동일하게 유지하면서 민감한 정보는 숨길 수 있습니다.

 

끝!

반응형

댓글