IT·리눅스/리눅스

SSH 키 인증과 ssh-agent - 비밀번호 없이 안전하게 접속하기

jmineekim 2026. 6. 10. 10:00

서버 십수 대를 매일 들락거리다 보면 비밀번호를 매번 치는 것도 일이고, 사실 보안 측면에서도 좋은 선택이 아닙니다. 무차별 대입 공격은 비밀번호 인증을 노리거든요. 키 기반 인증으로 바꾸고 ssh-agent까지 켜놓으면 비밀번호도 안 치고 더 안전해집니다. 오늘은 그 셋업을 한 번에 정리해 보겠습니다.

개념 / 원리

SSH 키 인증은 비대칭키 암호를 씁니다. 두 개의 키가 한 쌍이에요.

  • 공개키(public key): 서버에 등록하는 키. 외부에 노출돼도 됩니다.
  • 개인키(private key): 내 PC에만 두는 키. 절대 유출되면 안 됩니다.

접속할 때 흐름은 대충 이렇습니다.

  1. 클라이언트가 서버에 "이 공개키로 접속할게" 신호.
  2. 서버는 무작위 데이터를 공개키로 암호화해서 보냄.
  3. 클라이언트는 개인키로 풀어서 응답.
  4. 응답이 맞으면 인증 성공.

ssh-agent는 개인키에 패스프레이즈가 걸려 있을 때, 매번 패스프레이즈를 묻지 않도록 키를 메모리에 풀어서 들고 있는 데몬입니다. 부팅 후 한 번만 풀어두면 이후 SSH 접속은 패스프레이즈 없이 됩니다.

실전 예제

1. 키 생성

요즘은 ed25519가 사실상 표준입니다. RSA보다 짧고 빠르며 안전해요.

ssh-keygen -t ed25519 -C "your_email@example.com"

저장 경로(~/.ssh/id_ed25519)와 패스프레이즈를 물어봅니다. 패스프레이즈는 꼭 거시는 걸 권장합니다. 개인키 파일이 유출돼도 한 단계 방어막이 됩니다.

생성되면 두 파일이 만들어집니다.

  • ~/.ssh/id_ed25519 (개인키, 권한 600)
  • ~/.ssh/id_ed25519.pub (공개키)

2. 서버에 공개키 등록

가장 편한 방법은 ssh-copy-id입니다.

ssh-copy-id user@server

수동으로 등록하려면 공개키 내용을 서버의 ~/.ssh/authorized_keys에 한 줄로 추가합니다.

cat ~/.ssh/id_ed25519.pub | ssh user@server \
  "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. ssh-agent에 키 등록

# agent가 안 떠 있으면 띄우기
eval "$(ssh-agent -s)"

# 키 등록 (패스프레이즈 한 번 입력)
ssh-add ~/.ssh/id_ed25519

# 등록된 키 확인
ssh-add -l

이제 같은 셸 세션에서는 패스프레이즈 없이 SSH가 됩니다.

4. ~/.ssh/config로 호스트 별칭 만들기

서버 정보를 매번 외울 필요 없이 별칭으로 관리할 수 있습니다.

Host prod-web
    HostName 10.0.1.20
    User deploy
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host bastion
    HostName bastion.example.com
    User admin

# 배스천을 거쳐 들어가야 하는 내부 서버
Host db-internal
    HostName 10.0.2.50
    User dba
    ProxyJump bastion

이제 ssh prod-web 한 줄로 접속됩니다.

주의할 점

이 영역에서 흔히 만나는 함정들입니다.

첫째, 권한이 안 맞으면 SSH가 키를 그냥 무시합니다. 다음 권한이 필수입니다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

권한이 너무 열려 있으면 SSH 데몬이 보안상 위험하다고 판단해 키 인증을 거부합니다. ssh -v로 디버그 로그 보면 "Permissions ... are too open" 메시지가 찍혀요. 저는 신입 때 이걸 모르고 키가 등록되어 있는데도 비밀번호 인증으로 빠지는 걸 한 시간 동안 디버깅한 적이 있습니다.

둘째, agent forwarding(-A)은 신중하게. 점프 호스트에서 다른 서버로 갈 때 편하지만, 점프 호스트가 뚫리면 거기 떠 있는 다른 사용자가 내 키를 빌려 쓸 수 있습니다. 점프 호스트 신뢰가 확실하지 않다면 ProxyJump(ssh -J)를 쓰는 게 더 안전합니다.

셋째, RSA를 쓴다면 2048비트 이상, 더 좋게는 ed25519로 새로 만드세요. 1024비트는 이미 안전하지 않습니다.

넷째, 키 인증이 잘 되면 서버 측 /etc/ssh/sshd_config에서 PasswordAuthentication no로 비밀번호 인증을 꺼두는 걸 추천합니다. 무차별 대입의 표면 자체를 없앨 수 있습니다. 단, 키를 잃어버리면 들어갈 수 없으니 백업 수단(콘솔, 다른 키)을 꼭 마련해 두세요.

마무리

정리하면 세 줄입니다.

  • 비대칭키로 인증, 공개키는 서버 authorized_keys에, 개인키는 내 PC에만.
  • ssh-agent로 패스프레이즈는 세션당 한 번만, ~/.ssh/config로 별칭 관리.
  • 권한 600/700 꼭 맞추고, 키 인증 검증 후 비밀번호 인증은 꺼두기.
반응형