리눅스에서 비밀번호 없는 SSH 로그인 활성화 방법

비밀번호 없는 SSH 리눅스 00 대표 이미지

비밀번호 없이 SSH 서버에 로그인하는 것은 훌륭한 아이디어입니다. 진지하게, 비밀번호를 없애세요. 리눅스 서버에서 가장 많이 공격받는 서비스 중 하나에 비밀번호를 사용할 필요가 있나요? 표준 비밀번호 기반 인증을 사용하여 SSH 서버를 보호하는 것은 나쁜 아이디어입니다. 공격자는 비밀번호를 쉽게 무차별 대입할 수 있으며, 그것이 나쁜 행위자와 당신의 서버 사이에 유일한 방어선이라면, 당신은 확실히 불안해야 합니다.

목차

  • 패키지 설치
  • 리눅스에서 SSH 키 생성
  • 원격 리눅스 호스트에 키 전송
  • 리눅스에서 SSH 연결 테스트
  • 비밀번호 차단을 위한 SSH 구성
  • 자주 묻는 질문

그렇기 때문에 RSA 키 기반 인증이 훨씬 더 좋습니다. 이미 수락된 RSA 키를 보유한 컴퓨터만 접근할 수 있도록 리눅스 서버를 구성하고 보호할 수 있습니다. 다른 모든 사용자는 즉시 거부됩니다. 추가적인 이점으로, 비밀번호가 있는 키 또는 없는 키를 생성할 수 있으며, 이는 전적으로 당신의 선택입니다. 대부분의 경우 비밀번호가 없는 강력한 키는 괜찮습니다.

집에서도 리눅스 장치를 사용하는 경우, 편리함의 추가 이점이 있습니다. 리눅스 워크스테이션에서 노트북으로 SSH X-포워딩을 설정하고 싶다고 가정해 보세요. 원격 프로그램을 실행할 때마다 비밀번호를 입력하고 싶으신가요? SSH 키를 설정하면 필요하지 않습니다.

패키지 설치

필요한 패키지가 몇 가지 있습니다. 아마도 이미 일부는 설치되어 있을 것입니다. 그러나 확인하는 것이 좋습니다. 패키지는 서버와 클라이언트 모두에서 동일합니다. 그러나 두 기계가 서로 서버이자 클라이언트일 가능성도 높으므로(가정 상황), 이러한 패키지가 설치되어 있는지 확인하는 것이 좋습니다.

OpenSSH 메타 패키지는 Debian 또는 Ubuntu 시스템에서 기본적으로 설치되어 있지 않습니다. 이미 설치되어 있지 않다면, 다음 명령어를 실행하여 설치할 수 있습니다:

sudo apt install ssh

비밀번호 없는 SSH 리눅스 02 OpenSSH 설치

리눅스에서 SSH 키 생성

리눅스에서 SSH 키를 생성하는 것은 정말 쉽습니다. OpenSSH에 키를 생성해야 한다고 알려주기만 하면 됩니다. -b 플래그로 비트 수를 지정하고 -t로 유형을 지정하는 것도 좋은 생각입니다. 4096 비트 키가 가장 좋으며, 더 강력한 암호화를 제공합니다.

ssh-keygen -t ed25519

먼저, 유틸리티가 키를 저장할 위치를 묻습니다. 기본 디렉토리에 대해 Enter 키를 누르세요. 비밀번호를 묻는 경우, 비밀번호 없는 키와 비밀번호 없는 인증을 위해 비워 두세요. 키에 비밀번호를 사용하고 싶다면 여기에서 입력하세요.

당신의 컴퓨터는 키를 생성하는 데 몇 초가 걸립니다. 완료되면 터미널에 키의 ASCII 아트 표현을 출력합니다.

원격 리눅스 호스트에 키 전송

키를 사용하려면 원격 서버에 전송해야 합니다. OpenSSH에는 이를 위한 또 다른 내장 유틸리티도 있습니다. 키가 어디에 있는지와 서버에서 어떤 사용자와 연결할 것인지 알려주세요.

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip_remote_host

ip_remote_host를 원격 호스트의 실제 IP 주소로 바꾸고, username을 원격 호스트의 실제 사용자 이름으로 바꾸세요.

비밀번호 없는 SSH 리눅스 04 SSH 복사 ID

-i 옵션을 사용하여 공개 키가 포함된 신원 파일을 지정하는 것이 중요합니다. 이 옵션 없이 SSH 키를 사용하려고 하면 오류가 발생할 수 있습니다.

리눅스에서 SSH 연결 테스트

원격 서버에 SSH 키가 있으면 이제 연결이 제대로 작동하는지 테스트할 수 있습니다.

다음 명령어로 로그인하세요:

ssh username@ip_remote_host

원격 호스트는 사용자 계정 비밀번호를 묻지 않고 로그인합니다.

비밀번호 없는 SSH 리눅스 06 비밀번호 없는 로그인

그러나 과정 중에 실수를 했다면, SSH 데몬은 사용자 계정에 대해 비밀번호 인증으로 자동으로 되돌아갑니다. 이렇게 하면 비정상적인 RSA 키가 있어도 여전히 원격 서버에 접근할 수 있습니다.

비밀번호 없는 SSH 리눅스 07 로그인 실패

비밀번호 차단을 위한 SSH 구성

최고의 보안을 위해 리눅스 서버에서 SSH 비밀번호 로그인을 비활성화해야 합니다. SSH에서 이중 인증을 활성화하는 것과 유사하게, 이는 누구도 서버에 무차별 대입으로 접근하는 것을 방지합니다.

비밀번호 없는 SSH 리눅스 08 이중 인증 샘플

이 작업을 수행하기 전에 SSH 키로 신뢰할 수 있게 로그인할 수 있는지 확인하는 것이 중요합니다. 비정상적인 키가 있는 경우 원격 서버에서 잠길 수 있습니다.

SSH 데몬의 구성 파일은 “/etc/ssh/sshd_config”에 있습니다. 서버에서 sudo와 선호하는 텍스트 편집기를 사용하여 파일을 엽니다. 예를 들어, 다음 명령어를 실행하여 nano를 사용하여 이 파일을 엽니다:

sudo nano /etc/ssh/sshd_config

Ctrl + W를 눌러 아래의 줄을 찾아서 예제처럼 보이도록 수정합니다. 두 항목의 주석을 제거하고 값을 no로 변경합니다.

PasswordAuthentication no  
PermitEmptyPasswords no

비밀번호 없는 SSH 리눅스 09 옵션 찾기 나노

PasswordAuthentication은 비밀번호 인증을 사용할지 여부를 지정합니다. 우리는 SSH 키만 사용하고 싶기 때문에 이를 “no”로 설정합니다.

PermitEmptyPasswords는 서버가 비밀번호가 비어 있는 로그인 허용 여부를 지정합니다. 이는 절대 허용해서는 안 되므로 “no”로 설정합니다.

다음으로 “UsePAM” 줄을 찾아 “no”로 변경합니다. 이렇게 하면 데몬이 SSH 키 외의 인증 방법(비밀번호, Kerberos 등)을 사용하지 않도록 방지합니다.

UsePAM no

비밀번호 없는 SSH 리눅스 11 PAM 지원 비활성화

Ctrl + O를 눌러 파일을 저장한 후 Ctrl + X를 눌러 SSH 서버를 다시 로드합니다.

sudo systemctl restart ssh

이제 인증을 위해 SSH 키만 사용하도록 서버를 성공적으로 구성했으므로, 유효한 RSA 키 없이 로그인하려는 모든 사용자는 즉시 거부됩니다.

비밀번호 없는 SSH 리눅스 12 키 없는 로그인

자주 묻는 질문

SSH 키를 리눅스 서버에 전송할 때 “연결 거부” 오류가 발생합니다. 어떻게 해결하나요?

원격 호스트에서 SSH 서버가 실행 중인지 확인하세요. sudo systemctl status ssh를 실행하여 확인할 수 있습니다. 서비스가 실행 중이지 않다면, 다음 명령어로 시작할 수 있습니다: sudo systemctl start ssh.

서버에서 방화벽이 실행 중인 경우, 포트 22가 열려 있는지 확인하세요. sudo ufw status를 실행하여 확인할 수 있습니다. SSH가 나열되지 않으면, 다음 명령어로 활성화할 수 있습니다: sudo ufw allow ssh.

로그인 시 “Permission denied (publickey)” 오류가 발생합니다. 어떻게 해야 하나요?

이 오류는 서버가 인증을 위해 키를 사용하도록 구성되었지만 여전히 비밀번호로 로그인하려고 한다는 것을 의미합니다. 이는 RSA 키가 없거나 SSH 설정이 잘못되었기 때문일 수 있습니다. 공개 키를 서버에 올바르게 복사했는지 확인하고, 연결할 때 올바른 공개 키를 지정하고 있는지 확인하세요.

연결 시 “Host key verification failed” 오류가 발생합니다. 어떻게 해결하나요?

이 오류는 SSH 서버의 호스트 키가 변경되었다는 것을 의미합니다. 서버가 재설치된 경우 발생할 수 있습니다. 새로운 공개 키를 재생성하고 원격 호스트에 복사할 수 있습니다. 이 문서의 단계를 반복하여 새로운 키를 재생성하고 서버에 추가하세요.

동일한 원격 리눅스 서버에서 여러 SSH 키를 사용할 수 있나요?

예. OpenSSH에서 -f 옵션을 사용하여 원격 서버에 연결할 때 사용할 정확한 키를 지정할 수 있습니다. 예를 들어, ssh -f ~/.ssh/id_rsa_2 username@remote_ip_address를 실행하면 기본 “id_rsa” 대신 “id_rsa_2” 키를 사용하여 원격 서버에 연결됩니다.

그러나 이 명령은 원격 서버가 이미 새로운 키를 인식하고 있어야만 작동합니다. 먼저 ssh-copy-id를 사용하여 원격 서버에 복사해야 합니다. 위의 단계와 유사하게, 비밀번호 또는 RSA 키 인증을 통해 이를 수행할 수 있습니다.

SSH 키를 서버에 복사하려고 할 때마다 “Permission Denied” 오류가 발생합니다.

이 문제는 원격 서버의 권한 문제 때문일 가능성이 높습니다. 대부분의 경우, ssh-copy-id 유틸리티는 원격 서버에 연결되면 액세스 문제를 적절히 해결해야 합니다. 그러나 이 기능이 고장 나서 로컬 머신의 “id_rsa”를 제대로 복사하지 못하는 경우도 있습니다.

이 문제를 해결하려면 원격 서버에 로그인하고 chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.ssh를 실행하세요. 이렇게 하면 “.ssh” 폴더와 그 내용에 대한 올바른 권한 비트를 설정합니다.

이미지 출처: Unsplash. 모든 수정 및 스크린샷은 Ramces Red에 의해 작성되었습니다.