private SPM 설치하기
👋 들어가기 전

이전 포스팅에서 힘들게 만들어놨던 내용을 이제 우리 프로젝트에 가져와야하는데..
아무래도 API 관련된 코드들이다 보니.. repository의 접근성이 private으로 되어있다.
즉, Open Source와 같은 형태로 가져올 수가 없다..

하지만, 블로그를 뒤져본 결과 방법은 있더라.. 근데 처음 해보는 형태라 기록을 좀 해두려고한다.
🏁 학습할 내용
- 사전 준비
🏇 사전 준비

Open Source를 사용할 떄, 우리는 HTTPS를 통해서 SPM을 등록했다.
하지만, 우리는 보안상 사용할 수 없고, 다른 방법인 SSH를 통해 통신하는 방법을 배워보려한다.
SSH는 데이터 전송 중에 암호화를 사용하여 보안을 유지할 수 있다는 장점이 있다.
🔑 ssh key 준비
먼저 ssh 통신을 위한 key를 발급받아야한다.
ssh-keygen
명령어를 통해 계속 enter를 누르면 다음 과정을 거친다.


id_ed25519: 개인키
id_ed25519.pub: 공유키
⚙️ Config파일에 명시하기

위 사진을 보면, ssh를 사용할 떄는 조금 특별한 형태를 이용한다.
사용자ID@서버명 (User@HostName)
이 내용을 ~/.ssh 폴더의 config 파일에 명시한다.
# ex) 예
Host 호스트 # 호스트 github.com HostName의 alias 느낌
HostName 서버명 # ex: github.com , 실제 HostName
User 사용자명 # ex: git, ...
IdentityFile ~/.ssh/파일이름 # 타겟 ssh key 파일 경로
Host github.com
Hostname ssh.github.com # 기본 port 22를 사용하면 github.com으로 해도 됨
User git
IdentityFile ~/.ssh/id_rsa
Port 443 # timeout으로 인한 변경
UseKeychain yes
AddKeysToAgent yes
💾 ssh key 등록하기
Githb 오른쪽 프로필 사진 클릭 -> settings -> 왼쪽 탭에서 SSH And GPG Keys
New SSHKey 클릭!


Github에 공개키(.pub) 내용을 제공해야한다.
cat ~/.ssh/id_xxx.pub | pbcopy // 클립보드에 공개키 내용 복사
🧪 Test 하기
ssh -T git@github.com // 연결 시도
1️⃣ 발생한 오류
기본 port가 22인데 나는 timeout이 나온다.

config 파일에 port를 443으로 지정 후, 다시 실행!

📦 설치

Repository에 접근 가능한 토큰 인증이 되어있으면, https 링크를 검색해도 노출된다.
하지만 CI서버에서는 현재, package 설치를 못하고 있어서... 해결방법을 찾으면 다시 이어 가겠다..
😂 CI 이슈 해결

드디어 해당 이슈를 해결했다. 일단 먼저 상황 파악을 해보자.
👿 문제

CI 서버에서는 어떤 private repository 접근이 안되는 상황..
여기서 그러면 떠오르는 해결 방법은 2개다.
- 눈물을 머금고 public으로 돌리기
- CI서버도 접근할 수 있게 인증해주기
그렇다면 로컬에서 해줬던건 결국 Personal Acess Token으로 인증을 해주거나,
SSH key를 이용하는 방법 뿐인데...
CI서버에서, SSH key를 만든고 등록을 해준다?? 좀 이상한한 듯 하다..
그러면 방법은 PAT를 쓰는 방법인데, 어떻게 접근할 수 있게 설정을 해줄까
뭔가 접근하는게 나라는걸 알려주는 방법이 없을까 ??
🪽 .netrc
❓ .netrc이란?
POSIX 호환 시스템(예: Unix 및 Linux)에서 네트워크 접속을 위한 로그인 및 초기화 정보를
저장하는 데 사용되는 설정 파일
🧩 역할
- FTP 클라이언트 및 FTP를 지원하는 기타 유틸리티의 로그인 및 초기화 정보를 저장한다.
- 스크립트나 프로그램에서 수동으로 입력 없이 서버에서 자동으로 접속하도록 도와줌
- 당연히, Git, curl, wget, SPM도 자동으로 해당 정보를 읽음
⚠️ 쓰기전 주의할 점
문제 해결의 목적으로 쓰기 아주 좋은 파일이다.
근데 여기서 조심할 점은 보안적인 우려가 있다.
출처에 남긴 글을 빌려보면, 보안 점검할 떄 .netrc 파일 존재 여부를 본다고 한다.
아래 항목을 주의해야한다고 한다.

여기서 우리는 권한 설정 정도는 해줄 수 있을 것 같다.
📘 .netrc 작성
이제 직접 작성하자. 우리는 CI 상황에서 작성하기 떄문에 echo 명령어를 이용한다.
- name: 🎫 Setup .netrc for GitHub
run: |
echo "machine github.com" >> ~/.netrc
echo " login ${GITHUB_ACTOR}" >> ~/.netrc
echo " password ${{ secrets.PERSONAL_ACCESS_TOKEN }} " >> ~/.netrc
chmod 600 ~/.netrc
machine <호스트> # 우리는 github
login <유저명>
password <비밀번호 또는 토큰> # PAT
✅ 결과

정말 값진 훈장이다..
물론 이 훈장은 나 혼자 힘으로 얻어낸 것이 아니다.
SSH로 어떻게는 머리를 들이 박으며, 시도 했고, 너무 답이 안나와서 오랜만에 나의 iOS 개발에
좋은 영향을 주시는 baegteun님께서 어제 늦게 퇴근하신 11시에도 약 1시간 가량 같이 부딪혀주셨고
해결되지는 않았지만, 마지막으로 툭 던져주신 블로그에서 해답을 얻을 수 있었다..

이번 경험으로 한층 나만의 무기를 만든 느낌이라, 어제 사실 잠을 잘 못잤지만 오늘은 편히 잘 수 있을 것 같다.
감사합니다 baegteun 다음에 컨퍼런스에서 만나면 맛있는거 사드릴께요!

baekteun - Overview
으악 ;ㅁ;. baekteun has 102 repositories available. Follow their code on GitHub.
github.com
출처
iOS 패키지(SPM, Cocoapods, Carthage) git private repository 에서 가져오기
개요현재 회사에서는 여러 개의 iOS 앱을 운영중이다. 근데 이 앱들마다 따로 존재하지만 같은 목적으로 사용되는 똑같은 코드들이 있었다.로그를 위한 Logger, 유틸성 객체나 extension들을 모아둔
kyungpyoda.tistory.com
(리눅스 서버 보안) 15. 자동으로 FTP에 로그인을 허용하는 .netrc 파일 제거
리눅스 서버 취약점 보안 취약점 점검항목: 15. 자동으로 FTP에 로그인을 허용하는 .netrc 파일 제거 취약점 점검기준 - 양호기준: .netrc 파일이 존재하지 않을 경우 양호합니다. - 취약기준: .netrc 파
reddb.tistory.com