히스토리

  • [2025-12-20 Sat 17:24] 노트로 옮김
  • [2025-07-08 Tue 12:10] 비밀키 공유키 워크플로우에 대해서 핵심 단어를 남긴다. 형제들 노트를 확인하라.

관련메타

BIBLIOGRAPHY

2025 전체 보안 인증 구조 및 활용 관점

[2025-07-08 Tue 12:15]

  • 노트북에서 스토리지 서버를 경유해서 바로 GPU 서버로 들어가는 방버
  • 스토리지 서버에서도 GPU 서버로 직접 들어가야 한다. 그렇기 때문에 스토리지 서버에서도 노트북에 있는 비밀키를 가지고 있어야 한다.
  • 그럴 생각이 없었다. 비밀키를 스토리지 서버에 두지 않으려고 했다. 근데 cockpit이나 프로메테우스 인프라 관리를 하려면 인증 키가 필요하다.
  • 대충 만든 키로 사용하는 것보다 명시적으로 만든이가 확실히 관리하는 개인 키를 사용하는 것이 좋다.
  • 이렇게 되면 비밀키는 노트북에 있고, 스토리지 서버에 있다. 스토리지서버에는 물론 공개키도 있다.
  • ssh-copy-id로 GPU 서버 각각에 공개 키를 등록해 놓는다. 물론 이럴 경우에 스토리지 서버의 보안키가 있기 때문에 로그인이 가능하다.
  • 프록시 점프는 노트북에서 GPU 노드로 바로 들어가는 방법. 터널링 프록시 이런 개념은 매우 중요하다.

핵심 파일

  • .ssh/config : 노트북, 스토리지서버

비밀키가 있어야 서버에 들어갈 수 있다.

예를 들면 다음과 같다. 지정해서 로그인

ssh -i ~/.ssh/id_rsa_jhkim2goqual hejdev@gpu1

이렇게 하지 않을 경우에는 SSH 에이전트를 활용한다.

quote SSH 에이전트(SSH Agent)란 무엇인가?

**SSH 에이전트(ssh-agent)**는 사용자의 SSH 개인키(Private Key)를 메모리에 안전하게 보관하고, SSH 접속 시 자동으로 인증에 사용할 수 있도록 해주는 키 관리 데몬입니다.

목적:

SSH 키를 매번 직접 입력하거나 -i 옵션으로 지정하지 않아도, 한 번만 에이전트에 등록해두면 여러 서버에 패스워드 없이 접속 가능

여러 개의 SSH 키를 동시에 관리 가능

동작 원리 사용자가 ssh-agent를 실행하면, 별도의 프로세스가 메모리에서 동작

ssh-add 명령으로 개인키를 에이전트에 등록

실제로 좋아하는 방법 : IdentifyFile

s3 서버에서 config 파일에 IdentifyFile을 지정하면 된다.

2025-12-20 SSH 최적화 및 TRAMP 연동

[2025-12-20 Sat 17:25]

외부망 접속용 ProxyJump 설정 (s3i, gpu1i)

내부망(s3)과 외부망(s3i) 경로를 분리하여 네트워크 환경에 따라 유연하게 전환.

s3i 설정 (외부망 → 스토리지 서버)

Host s3i
	HostName 211.106.187.123
	User goqual
	Port 22222
	ServerAliveInterval 60
	ServerAliveCountMax 3
	TCPKeepAlive yes
	IdentityFile ~/.ssh/id_rsa_jhkim2goqual
	IdentitiesOnly yes

gpu1i, gpu2i, gpu3i 설정 (외부망 경유 GPU 접속)

Host gpu1i cluster11i
	HostName 192.168.2.11
	User goqual
	ProxyJump s3i
 
Host gpu2i cluster12i
	HostName 192.168.2.12
	User goqual
	ProxyJump s3i
 
Host gpu3i cluster13i
	HostName 192.168.2.13
	User goqual
	ProxyJump s3i

ControlMaster: SSH 연결 재사용

동일 호스트 재접속 시 기존 연결 재사용 → 인증 생략, 속도 향상. 터미널(Ghostty)과 Emacs TRAMP 모두 동일한 소켓 공유.

~/.ssh/config 최상단에 추가

Host *
	ControlMaster auto
	ControlPath ~/.ssh/sockets/%r@%h-%p
	ControlPersist 600

소켓 디렉토리 생성 필수

mkdir -p ~/.ssh/sockets
chmod 700 ~/.ssh/sockets

SSH 옵션 의미 정리

옵션의미TRAMP 영향
SetEnv TERM=xterm-ghostty원격 터미널 타입 강제⚠️ 간접 문제 가능
RequestTTY forcePTY 할당 강제❌ 방해됨 (제거 권장)
IdentitiesOnly yes지정 키만 사용✅ 문제 없음, 권장
ServerAliveInterval연결 유지 핑 간격✅ 외부망 필수
ControlMaster auto연결 재사용 마스터✅ 속도 향상

TRAMP 사용 시 주의

  • RequestTTY force 제거 필수 (비대화형 명령 실행 방해)
  • SetEnv TERM 제거 권장 (셸 초기화 스크립트 간섭 가능)

Doom Emacs TRAMP 최적화 설정

config.el 설정

(after! tramp
  (setq tramp-default-method "ssh")
 
  ;; 소켓 디렉토리 자동 생성
  (let ((socket-dir "~/.ssh/sockets"))
    (unless (file-exists-p socket-dir)
      (make-directory socket-dir t)
      (set-file-modes socket-dir #o700)))
 
  ;; ControlMaster 설정 (%를 %%로 이스케이프)
  (setq tramp-ssh-controlmaster-options
        "-o ControlMaster=auto -o ControlPath=~/.ssh/sockets/%%r@%%h-%%p -o ControlPersist=600"))

주의: % 이스케이프

Emacs Lisp 문자열에서 % 는 format 특수문자 → %%r, %%h, %%p 로 작성.

SSH config에 위임하는 방법 (대안)

(after! tramp
  (setq tramp-default-method "ssh")
  (setq tramp-ssh-controlmaster-options ""))  ;; SSH config에 위임

auth-source: pass + authinfo.gpg 병용

설정

;; pass 우선, authinfo.gpg 폴백
(setq auth-sources '(password-store "~/.authinfo.gpg"))
 
;; GPG 키 (authinfo.gpg 암호화용)
(setq epa-file-encrypt-to '("B5ADD9F47612A9DB"))

동작 순서

  1. password-store (pass)에서 먼저 검색
  2. 없으면 ~/.authinfo.gpg 폴백

pass 경로 규칙

요청pass 경로
machine api.github.com login user~/.password-store/api.github.com/user.gpg
machine smtp.gmail.com~/.password-store/smtp.gmail.com.gpg

auth-source 필요 여부

기능필요
TRAMP + SSH 키❌ 불필요
Forge (GitHub API)✅ 필수
mu4e/Gnus (SMTP)✅ 필수
ERC/IRC✅ 필수

핵심 요약

  1. 내부망/외부망 분리: s3 vs s3i, gpu1 vs gpu1i
  2. ControlMaster: 터미널 + TRAMP 모두 속도 향상
  3. TRAMP 주의: RequestTTY force 제거, % 이스케이프
  4. 인증 관리: pass 우선 + authinfo.gpg 폴백