기록_Synology NAS Docker 기반code-server와 GitHub 연동_260909
Synology NAS를 단순한 저장장치가 아니라, 브라우저에서 접속해 코드를 쓰고 Docker로
실행환경을 분리하며 GitHub에 개발이력을 남길 수 있는 작은 개발서버로 만들어본 기록.
구축 목적 : 데이터 엔지니어링 학습을 위해서 VS Code같은 파이썬을 공부할 플랫폼을 NAS 구축하려 함
- 구성 방향 : NAS / Docker / code-server / GitHub의 역할을 먼저 나눔
- code-server 구축 : Container Manager와 Compose로 브라우저 개발환경 구성
- Python 첫 실행 : workspace에서 hello.py 실행, UTF-8 인코딩 문제해결
- GitHub SSH 연결 : ED25519 키 생성, 공개키 등록, 권한 설정
- Permission denied 문제 해결 : 명시적 키 지정은 성공하지만 기본 SSH는 실패한 원인 확인
AI와 대화를 통해 나눈 전체 구성요소

1. NAS Container Manager에 Code-server 설치
Container Manager → 프로젝트 생성
프로젝트 이름은 dev-server , 작업 경로는 /volume1/docker/dev-server 로 두고 Compose 내용을 입력
2. 브라우저에서 접속해서 활용 가능여부 확인
Container Manager에서 해당 프로젝트에서 터미널 열고 Bash 페이지에 접속 후 code-server의 Terminal에서 Python과 Git을 확인함
3. workspace에서 Python 실행
/workspace/python-study 폴더에 hello.py 를 만들고 간단한 코드를 실행
def greeting(name):
return f"Hello, {name}!"
print(greeting("강석원"))
이후 아래 명령어로 확인 시도함
cd /workspace/python-study
python3 hello.py
그런데 오류가 생김..
SyntaxError: Non-UTF-8 code starting with ‘\xb0’ in file…
이유 : 코드 문법 자체가 아니라 hello.py가 UTF-8이 아닌 인코딩으로 저장된 문제였다. code-server 오른쪽 아래 인코딩 메뉴에서 Save with Encoding → UTF-8로 다시 저장한 뒤 정상 실행됨
4. code-server와 GitHub를 SSH로 연결
GitHub는 SSH 키로 연결했다. 비밀번호를 매번 입력하는 방식보다, NAS 안에 개인키를 두고 GitHub에는 공개키만 등록
- 키 생성 : 처음에는 기본 경로에 생성했는데 위치 확인에서 혼선이 있었기 때문에, 저장 위치를 아예 명확히 지정하는 방식으로 정리,
명령어를 통해 아래 두 파일 생성함
mkdir -p /config/.ssh
chmod 700 /config/.ssh
ssh-keygen -t ed25519
-C "본인의_GitHub_이메일"
-f /config/.ssh/id_ed25519
– 생성된 파일
id_ed25519 개인키 외부 공개 금지
id_ed25519.pub 공개키 GitHub의 SSH Keys에 등록
2) 공개 키 확인
cat /config/.ssh/id_ed25519.pub
명령어를 통해 공개 키 확인함
출력되는 ssh-ed25519 AAAA… 한 줄 전체를 GitHub의 Settings → SSH and GPG keys → New SSH key에
Authentication Key로 등록
3) 권한 설정
chmod 700 /config/.ssh
chmod 600 /config/.ssh/id_ed25519
chmod 644 /config/.ssh/id_ed25519.pub
5. SSH 연결에서 여러 문제가 발생함


그런데 아래 명령어처럼 “-i”를 붙여서 확인하면
Hi ㅇㅇㅇ! You’ve successfully authenticated… 하면서 인증이 됨
처음에는 GPT가 하라는대로 처음에는 /config/.ssh/config 파일을 만들고 아래처럼 지정
Host github.com
HostName github.com
User git
IdentityFile /config/.ssh/id_ed25519
IdentitiesOnly yes
권한도 맞췄지만 ssh -T git@github.com 은 계속 실패
그래서 다음 명령어로 Bash에서 SSH가 실제로 어떤 설정을 적용하는지 확인해봄
ssh -G github.com | grep -E '^(user|hostname|identityfile|identitiesonly) '
그러니 다음 내용처럼 출력함
user root
hostname github.com
identitiesonly no
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
설정 파일이 정상 적용됐다면 user git , identitiesonly yes , identityfile /config/.ssh/id_ed25519 가 보여야
했다. 실제 출력은 그렇지 않았으므로 /config/.ssh/config 자체가 OpenSSH에 적용되지 않는 상태인 것
여기서 echo $HOME 은 /config 라고 나왔지만, 그것만으로 OpenSSH의 사용자 설정파일 탐색까지 정상이라고 단정할 수 없었기에 아래 명령어로 실제 사용자 홈도 별도로 확인하는 단계가 필요
getent passwd "$(id -un)" | cut -d: -f6
이런 뻘짓 끝에 최종적으로는
다음 명령어로 컨테이너 시스템 SSH 설정에 들어가서,
nano /etc/ssh/ssh_config
아래 내용처럼 Github용 키를 집어넣음(아직 제대로 무슨 내용인지 이해는 잘 안감)
Host github.com
HostName github.com
User git
IdentityFile /config/.ssh/id_ed25519
IdentitiesOnly yes
이후 설정 적용 여부를 다시 확인하고
ssh -G github.com | grep -E '^(user|hostname|identityfile|identitiesonly) '
마지막으로 아래 명령만으로 GitHub 인증과 연동이 정상적으로 되는 것을 확인함
ssh -T git@github.com
하지만 이 해결책(/etc/ssh/ssh_config)은 컨테이너 내부 설정이므로 code-server 컨테이너를 완전히 재생성할 때 초기화될 가능성을 염두에 둬야 한다고 함(GPT발 내용)
향후 진행방향
앞으로 이어지는 과정으로는 Docker에서 파이썬 코드를 작성/수정하고, 이력관리는 Github으로 하는 방식이 어떨까 함
아직도 전체 구조는 이해못하는 부분이 많으니 AI의 도움을 받아서 차근히 해봐야겠음
본격적인 개발에 들어가지도 않고 터미널에서 Bash 좀 쓰고 있는데도 이 난리인데, 앞으로 갈 길이 첩첩산중이다 싶음.