Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

SSH 비밀번호 없이 로그인하는 방법: ssh-keygen과 ssh-copy-id로 끝내는 3단계 설정

이 글에서 소개하는 단순한 3단계만 거치면, ssh-keygenssh-copy-id 명령어를 사용해 원격 리눅스 서버에 비밀번호를 입력하지 않고도 로그인할 수 있습니다.

핵심 명령어 미리 보기

ssh-keygen은 공개 키와 개인 키 쌍을 생성하는 도구입니다. ssh-copy-id는 로컬 호스트의 공개 키를 원격 호스트의 authorized_keys 파일에 복사하며, 원격 호스트의 홈 디렉터리, ~/.ssh, ~/.ssh/authorized_keys에 적절한 권한까지 자동으로 설정해 줍니다.

또한 이 글에서는 ssh-copy-id 사용 시 겪을 수 있는 세 가지 불편함과, ssh-agent와 함께 ssh-copy-id를 활용하는 방법까지 함께 다룹니다.

1단계: 로컬 호스트에서 ssh-keygen으로 공개 키·개인 키 생성

jsmith@local-host$ [참고: 현재 로컬 호스트에 있습니다]
jsmith@local-host$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa): [Enter 키 입력]
Enter passphrase (empty for no passphrase): [Enter 키 입력]
Enter same passphrase again: [Enter 키 입력]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 jsmith@local-host

키 저장 경로는 기본값(/home/jsmith/.ssh/id_rsa)을 그대로 사용하고, 패스프레이즈는 비워 두면(Enter 키만 누르면) 비밀번호 없는 로그인이 가능합니다. 보안을 한층 강화하고 싶다면 패스프레이즈를 설정한 뒤 아래에서 소개하는 ssh-agent 연동 방식을 함께 사용하는 것을 권장합니다.

2단계: ssh-copy-id로 공개 키를 원격 호스트에 복사

jsmith@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
jsmith@remote-host's password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

참고: ssh-copy-id는 원격 호스트의 .ssh/authorized_keys 파일에 키를 덮어쓰지 않고 추가(append)합니다. 따라서 이미 등록된 다른 키들은 그대로 유지됩니다.

3단계: 비밀번호 없이 원격 호스트에 로그인

jsmith@local-host$ ssh remote-host
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2
[참고: 비밀번호를 묻지 않습니다]
jsmith@remote-host$ [참고: 이제 원격 호스트에 접속한 상태입니다]

대부분의 환경에서는 위의 3단계만으로 비밀번호 없는 SSH 로그인 설정이 완료됩니다. 앞서 openSSH에서 openSSH로 비밀번호 없이 SSH와 SCP를 수행하는 방법을 상세히 소개한 바 있으니 함께 참고하시기 바랍니다. SSH2를 사용하는 환경이라면 SSH2에서 SSH2로, OpenSSH에서 SSH2로, SSH2에서 OpenSSH로 비밀번호 없이 SSH와 SCP를 구성하는 방법도 이전 글에서 다루었으니 확인해 보세요.

ssh-add/ssh-agent와 함께 ssh-copy-id 사용하기

-i 옵션에 값을 전달하지 않았는데 ~/.ssh/identity.pub 파일이 존재하지 않으면, ssh-copy-id는 다음과 같은 오류 메시지를 출력합니다.

jsmith@local-host$ ssh-copy-id -i remote-host
/usr/bin/ssh-copy-id: ERROR: No identities found

ssh-add로 ssh-agent에 키를 미리 등록해 두었다면, -i 옵션 없이 ssh-copy-id를 실행했을 때 ssh-agent에 저장된 키를 가져와 원격 호스트에 복사합니다. 즉, ssh-add -L 명령이 출력하는 키가 원격 호스트로 전송됩니다.

jsmith@local-host$ ssh-agent $SHELL

jsmith@local-host$ ssh-add -L
The agent has no identities.
jsmith@local-host$ ssh-add
Identity added: /home/jsmith/.ssh/id_rsa (/home/jsmith/.ssh/id_rsa)
jsmith@local-host$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsJIEILxftj8aSxMa3d8t6JvM79DyBV
aHrtPhTYpq7kIEMUNzApnyxsHpH1tQ/Ow== /home/jsmith/.ssh/id_rsa
jsmith@local-host$ ssh-copy-id -i remote-host
jsmith@remote-host's password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[참고: ssh-add -L이 출력한 키가 추가되었습니다]

ssh-copy-id의 세 가지 아쉬운 점

ssh-copy-id는 매우 편리한 도구이지만, 실무에서 다음과 같은 사소한 불편함이 있습니다.

  1. 기본 공개 키 파일 고정: ssh-copy-id는 -i 옵션에 값이 전달되지 않으면 ~/.ssh/identity.pub를 기본 공개 키 파일로 사용합니다. id_dsa.pub, id_rsa.pub, identity.pub 중 하나라도 존재하면 그것을 기본 키로 삼고, 여러 개가 모두 존재할 때만 identity.pub를 우선한다면 더 합리적일 것입니다.
  2. 'The agent has no identities' 오류 무시: ssh-agent가 실행 중인데 ssh-add -L 결과가 'The agent has no identities'(에이전트에 등록된 키 없음)일 때, ssh-copy-id는 오류를 걸러내지 않고 이 메시지 문자열을 그대로 원격 호스트의 authorized_keys에 추가해 버립니다.
  3. authorized_keys 중복 항목: ssh-copy-id가 원격 호스트의 authorized_keys에서 중복 항목을 검증해 주면 좋겠습니다. 로컬 호스트에서 ssh-copy-id를 여러 번 실행하면 중복 검사 없이 동일한 키가 계속 추가됩니다. 다행히 중복 항목이 있어도 동작에는 문제가 없지만, 관리 관점에서는 깔끔한 authorized_keys 파일을 유지하고 싶어집니다.

이 글이 도움이 되셨다면 북마크하거나 주변에 공유해 주세요.