SSH(Secure Shell)를 이용한 원격 서버 접속 시 비밀번호 대신 키 쌍(Key Pair)을 사용하면 보안성을 높이고 매번 비밀번호를 입력해야 하는 번거로움을 줄일 수 있습니다. 본 가이드에서는 공개키를 서버에 등록하는 방법부터 접속 유지 설정 및 주요 오류 해결법까지 정리합니다.
1. SSH 키 쌍 생성하기
가장 먼저 로컬 환경에서 서버와 통신할 때 사용할 공개키(Public Key)와 개인키(Private Key) 쌍을 생성해야 합니다.
ssh-keygen -t ed25519 -C "your_email@domain.com"
최근에는 보안성과 성능이 뛰어난 ed25519 방식을 권장하지만, 호환성을 위해 rsa 4096을 사용할 수도 있습니다. 생성된 키는 기본적으로 ~/.ssh/ 경로에 저장되며, .pub 확장자가 붙은 파일이 공개키입니다.
2. 원격 서버에 공개키 등록하기
방법 A: ssh-copy-id 명령어 활용
가장 간편한 방법은 ssh-copy-id 도구를 사용하는 것입니다. 이 명령어는 원격 서버의 authorized_keys 파일에 로컬의 공개키를 자동으로 추가해 줍니다.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host_ip
방법 B: 수동으로 공개키 전송
해당 도구를 사용할 수 없는 환경이라면 파이프라인을 통해 수동으로 등록할 수 있습니다.
cat ~/.ssh/id_ed25519.pub | ssh user@remote_host_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
이 명령어는 디렉토리 생성, 권한 설정, 키 추가를 한 번에 수행합니다.
3. 프라이빗 키(PEM)를 이용한 접속
클라우드 서비스에서 제공받은 .pem 파일이나 별도의 개인키를 사용하여 접속할 때는 파일의 권한 관리가 매우 중요합니다.
# 키 파일 권한을 소유자 읽기/쓰기로 제한
chmod 600 my_auth_key.pem
# 특정 키 파일을 지정하여 접속
ssh -i my_auth_key.pem ubuntu@server_address
매번 -i 옵션을 쓰기 번거롭다면 ssh-add 명령으로 에이전트에 등록해 둘 수 있습니다.
ssh-add -k my_auth_key.pem
4. SSH 접속 유지 설정 (Connection Timeout 방지)
장시간 입력이 없을 때 SSH 연결이 끊기는 현상을 방지하려면 서버측 설정을 수정해야 합니다.
# 서버 설정 파일 수정
sudo vim /etc/ssh/sshd_config
파일 내에서 다음 항목을 찾아 값을 변경합니다.
# 클라이언트에게 60초마다 신호를 보냄
ClientAliveInterval 60
# 클라이언트 응답이 없어도 연결을 유지할 최대 횟수
ClientAliveCountMax 120
설정 적용을 위해 SSH 서비스를 재시작합니다.
sudo systemctl restart sshd
5. 주요 에러 대응: Connection Reset by Peer
서버를 재설치했거나 호스트 키 정보가 변경되었을 때 kex_exchange_identification: read: Connection reset by peer 오류가 발생할 수 있습니다. 이때는 기존에 저장된 호스트 정보를 초기화해야 합니다.
ssh-keygen -R [서버_IP_또는_도메인]
이후 다시 접속을 시도하면 새로운 호스트 키를 수락할 것인지 묻는 메시지와 함께 정상적으로 연결됩니다.
6. 키를 이용한 최종 접속 테스트
모든 설정이 완료되면 아래와 같이 간결하게 접속이 가능합니다.
ssh user@remote_host_ip
정상적으로 설정되었다면 비밀번호 요구 없이 즉시 쉘(Shell)에 진입하게 됩니다.