SSH 와 파일 전송 · 키 기반 인증 · 실습
키 인증 세우기
목표
SSH 키를 만들어 권한을 맞추고, authorized_keys 에 등록해 실제로 접속합니다. 그리고 command= 제약이 붙은 키가 정말 그 명령만 실행하는지 확인합니다.
왜 중요한가
공개키 인증 실패의 대부분은 암호학이 아니라 파일 권한 문제입니다. ~/.ssh 가 group-writable 이면 sshd 는 키를 조용히 거부하고 비밀번호를 묻습니다 — 다른 사용자가 authorized_keys 에 자기 키를 넣을 수 있기 때문입니다. 즉 권한이 곧 인증 정책입니다. 그리고 command= 제약은 배포 자동화에서 사실상 필수입니다. CI 서버의 키가 유출돼도 그 키로는 지정된 명령 하나밖에 못 돌게 만들 수 있습니다.
이 실습 환경에는 127.0.0.1:2222 에 진짜 sshd 가 떠 있습니다. 같은 파드 안이지만 SSH 관점에서는 완전한 두 번째 서버입니다.
단계
1. /root/.ssh/id_labhub 에 ed25519 키 쌍을 패스프레이즈 없이 만드세요.
2. /root/.ssh 는 700, /root/.ssh/id_labhub 는 600, /root/.ssh/id_labhub.pub 는 644 로 권한을 맞추세요.
3. 방금 만든 공개키를 /root/.ssh/authorized_keys 에 추가하세요. 파일 권한은 600 이어야 합니다.
4. ssh-keyscan 으로 127.0.0.1 의 2222 포트 호스트 키를 가져와 /root/.ssh/known_hosts 에 등록하세요.
5. 그 키로 root@127.0.0.1:2222 에 접속해 원격에서 hostname 을 실행하고, 결과를 /root/ssh/connect.txt 로 저장하세요.
6. /root/.ssh/config 에 Host lab2 블록을 만드세요. HostName 127.0.0.1, Port 2222, User root, IdentityFile /root/.ssh/id_labhub, IdentitiesOnly yes 다섯 줄이 들어가야 합니다. 그리고 ssh lab2 hostname 이 성공하는 것을 확인해 /root/ssh/alias.txt 로 저장하세요.
7. /root/.ssh/id_restricted 에 두 번째 ed25519 키를 만들고, 그 공개키를 authorized_keys 에 추가하되 줄 맨 앞에 restrict,command="/bin/hostname" 옵션을 붙이세요. 그 키로 ssh -i /root/.ssh/id_restricted -p 2222 root@127.0.0.1 id 를 실행하면 id 가 아니라 hostname 결과가 나와야 합니다. 그 출력을 /root/ssh/restricted.txt 로 저장하세요.
8. /root/ssh/keys.txt 를 만드세요. authorized_keys 에 등록된 모든 키의 지문 목록을 담아야 하고, 최소 2줄이어야 합니다.
참고
ssh-keygen -t ed25519 -N '' -f <경로>로 패스프레이즈 없는 키를 만듭니다.ssh-keyscan -p 2222 127.0.0.1 >> /root/.ssh/known_hosts형태로 호스트 키를 등록합니다.ssh-keygen -lf /root/.ssh/authorized_keys로 파일 안의 모든 키 지문을 볼 수 있습니다.- 흔한 실수 1: 3번에서
>로 덮어써서 기존 키가 사라지는 경우. 반드시>>를 쓰세요. - 흔한 실수 2: 7번에서 옵션과 키 사이에 쉼표를 넣는 경우. 옵션 목록과 키 타입 사이는 공백입니다.
단계 8개
- 키 쌍 만들기
- 권한 맞추기
- 공개키 등록
- 호스트 키 등록
- 키로 접속하기
- 클라이언트 설정으로 별칭 만들기
- 명령 제한 키 만들기
- 등록된 키 감사