기본원리
- ssh 자동 로그인의 기본 원리는 다음과 같음
- 클라이언트 호스트의 퍼블릭 키를 서버 호스트의 authorized_keys 파일에 덧붙이면 됨
- 서버 호스트는 (이미 인증되었다고 판단되는) 클라이언트의 퍼블릭 키를 들고 있다가 패스워드를 물어보지 않고 자동 로그인을 허용해주게 됨
- 아래 방법은 퍼블릭 키를 파일로 복사해서 덧붙이는 방법으로 적어놨지만, 실제로는 퍼블릭 키 파일의 내용을 copy & paste로 서버 호스트에 로그인한 다음에 authorized_keys 파일에 덧붙여서 써줘도 동일한 효과가 있음
설정작업
- 클라이언트에서 퍼블릭 키 파일 생성
- ~/.ssh/id_rsa.pub 파일이 이미 존재하는지 확인해서 이미 존재하면 다음의 ssh-keygen을 이용한 키 생성은 필요없음
- 없으면 생성
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ""
- 서버에서 클라이언트의 퍼블릭 키 파일을 authorized_keys 파일에 덧붙임
- 실제로 파일을 복사할 필요는 없고 copy&paste해도 됨
scp ~/.ssh/id_rsa.pub 서버호스트:~/.ssh/클라이언트_id_rsa.pub
ssh 서버호스트
cat 클라이언트_id_rsa.pub >> ~/.ssh/authorized_keys
rm 클라이언트_id_rsa.pub
이런 번잡한 복사 및 덧붙이기 절차를 간단하게 처리할 수 있는 도구가 있음
ssh-copy-id 원격계정@원격서버주소
Troubleshooting
client-side
ssh -v로 테스트
server-side
sudo /usr/local/bin/sshd -D -d
-D 옵션은 deamon mode로 동작하지 않도록 지정
반드시 서버의 에러 메시지를 확인할 필요가 있음
config의 호스트별 설정
config의 호스트 별 설정이 기록되어 있다면 제대로 작성되었는지 확인할 것
특히 IdentityFile은 제공할 퍼블릭 키와 짝이 되는 프라이빗 키 파일을 지정해야 함
authorized_keys 파일의 호스트명 오기재 문제
클라이언트 쪽에서 인식할 수 없는 서버의 호스트명이 적혀있다면 수정할 것
authorized_keys 파일의 permission 문제
authorized_keys 파일의 permission이 644가 아니어서 오동작하는 경우가 있음
chmod 0644 ~/.ssh/authorized_keys
Could not load host key 에러
- 오후 12:33:53.597 sshd82377: error: Could not load host key: /etc/ssh_host_rsa_key
- 오후 12:33:53.597 sshd82377: error: Could not load host key: /etc/ssh_host_dsa_key
sudo ssh-keygen -t dsa -f /etc/ssh_host_dsa_key < /dev/null
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh_host_rsa_key < /dev/null
sshd의 설정 오류로 인한 문제
sshd가 authorized_keys 파일을 읽지 않도록 설정되어 있는 경우, /etc/sshd/sshd_config 파일 수정이 필요함
chattr -i /etc/ssh/sshd_config
vi로 편집
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
chattr +i /etc/ssh/sshd_config