SSH는 노트북이나 PC에서 라즈베리 파이를 원격으로 제어하는 가장 널리 쓰이는 방법 중 하나입니다. 이 글에서는 라즈베리 파이의 SSH 접속에 이중 인증(2FA)을 설정해 보안을 한층 더 강화하는 방법을 단계별로 살펴봅니다.
참고: SSH 키 파일을 사용해 라즈베리 파이에 접속하는 경우에는 이중 인증이 적용되지 않습니다.
1. 라즈베리 파이 업데이트
라즈베리 파이 OS로 기본 설정을 마쳤다면, 작업 전에 모든 소프트웨어가 최신 상태인지 확인하는 것이 좋습니다. 터미널을 열고 다음 명령어를 입력하세요.
sudo apt update && sudo apt -y upgrade
2. SSH 활성화
라즈베리 파이 OS는 기본적으로 SSH 서버가 비활성화되어 있습니다. SSH로 파이에 접속하려면 먼저 아래 명령어를 실행해 SSH를 활성화해야 합니다.
sudo systemctl enable ssh sudo systemctl start ssh
이제 SSH 서버에 접속할 수 있습니다.
챌린지-응답(challenge-response) 방식으로 인증 요구하기
이중 인증을 적용하려면 라즈베리 파이가 사용자에게 신원 인증을 요청하고 그 응답을 처리할 수 있어야 합니다. 이를 위해 챌린지-응답 방식의 비밀번호를 활성화해야 합니다.
먼저 다음 터미널 명령어를 실행해 SSH 설정 파일을 편집 모드로 엽니다.
sudo nano /etc/ssh/sshd_config
파일에서 ChallengeResponseAuthentication 항목을 찾아 "no"를 "yes"로 변경합니다.
Ctrl + O를 눌러 수정된 "sshd_config" 파일을 저장한 뒤, Ctrl + X로 편집기를 종료합니다.
터미널로 돌아가 새 설정을 적용하기 위해 SSH 데몬을 재시작합니다.
sudo systemctl restart ssh
SSH 설정이 변경되었으므로, 여전히 SSH로 라즈베리 파이에 정상적으로 접속되는지 확인하는 것이 좋습니다.
SSH 서버에 접속하려면 라즈베리 파이의 IP 주소를 알아야 합니다. IP 주소를 모른다면 파이에서 다음 명령어를 실행하세요.
hostname -I
이 명령은 접속에 필요한 IP 주소를 반환합니다.
이제 노트북이나 PC로 전환해 터미널을 실행하고 라즈베리 파이에 접속합니다. 이때 "10.3.000.0"은 반드시 자신의 고유 IP 주소로 바꿔 입력하세요.
ssh pi@10.3.000.0
이제 SSH로 성공적으로 연결되었습니다.
3. 이중 인증 설정하기
다음으로, 일회용 인증 코드를 생성할 인증기 앱을 다운로드합니다. 시중에는 다양한 인증 앱이 있지만, 이 튜토리얼에서는 iOS와 Android 모두에서 사용할 수 있는 Google Authenticator를 사용합니다.
모바일 앱을 설치했다면, 라즈베리 파이에도 Google Authenticator PAM 모듈을 설치해야 합니다.
파이에서 터미널 창을 열고 다음 명령어를 실행하세요.
sudo apt install libpam-google-authenticator
라즈베리 파이와 모바일 기기 양쪽에 Google Authenticator가 준비되면 이중 인증을 설정할 차례입니다.
연결 만들기: 라즈베리 파이와 모바일 기기 연동
모바일 앱과 라즈베리 파이를 연동하려면 파이에서 QR 코드를 생성한 후, 스마트폰이나 태블릿으로 해당 코드를 스캔하면 됩니다.
QR 코드를 생성하려면 라즈베리 파이로 돌아가 다음 터미널 명령어를 실행하세요.
google-authenticator
라즈베리 파이는 인증 토큰을 시간 제한 방식으로 생성할 것인지 묻습니다. 특별한 이유가 없다면 보안상 시간 기반(time-based) 인증 토큰을 선택하는 것이 좋습니다.
터미널에 QR 코드가 생성됩니다. 바코드 전체가 화면에 보이도록 터미널 창 크기를 조정해야 할 수도 있습니다.
동시에 일련의 비상 코드(emergency codes)도 함께 표시됩니다. 모바일 기기를 분실하거나 고장 난 경우에도 이 코드를 사용하면 기기 없이 SSH로 라즈베리 파이에 접속할 수 있습니다. 파이에서 잠기는 불상사를 피하려면 이 코드들을 반드시 안전한 곳에 기록해 두세요.
이제 QR 코드를 사용해 라즈베리 파이와 Google Authenticator 앱을 연결합니다.
- 스마트폰이나 태블릿에서 Google Authenticator 앱을 실행합니다.
- 오른쪽 하단의 "+" 버튼을 탭합니다.
- "QR 코드 스캔"을 선택하고, 요청 시 앱이 카메라에 접근하도록 권한을 허용합니다.
- 기기 카메라를 모니터의 QR 코드에 맞춥니다. 스마트폰이나 태블릿이 QR 코드를 인식하는 즉시 계정이 생성되고 인증 코드가 자동으로 발급되기 시작합니다.
- 라즈베리 파이로 돌아가면 터미널이 "google_authenticator" 파일을 업데이트할지 묻습니다. Y 키를 누릅니다.
- 여러 사람이 동일한 인증 토큰을 사용하지 못하도록 할지 묻는 질문에도 Y 키를 누릅니다.
- 시간 오차 허용 범위(time skew window)를 늘릴지 묻는 질문에는 무차별 대입(brute-force) 공격으로부터 보호하기 위해 N 키를 누릅니다.
- 마지막으로 속도 제한(rate-limiting)을 활성화할지 묻는데, 이 기능은 30초당 로그인 시도를 3회로 제한합니다. 무차별 대입 공격 등 비밀번호 기반 공격으로부터 보호하는 데 큰 도움이 되므로, 특별한 이유가 없다면 "Yes"를 선택하세요.
리눅스 PAM(Pluggable Authentication Modules) 설정
마지막으로, 리눅스 PAM을 사용해 라즈베리 파이에서 이중 인증을 활성화해야 합니다.
먼저 Nano 텍스트 편집기로 "sshd" 파일을 엽니다.
sudo nano /etc/pam.d/sshd
다음 줄을 추가합니다.
auth required pam_google_authenticator.so
단, 이 줄을 어디에 추가하느냐에 따라 인증 순서가 달라집니다.
1. 비밀번호 입력 후 인증 코드 요청
라즈베리 파이의 비밀번호를 입력한 후 일회용 인증 코드를 입력받으려면, 이 줄을 @include 뒤에 추가합니다.
2. 비밀번호 입력 전 인증 코드 요청
비밀번호를 입력하기 전에 일회용 인증 코드를 먼저 입력받으려면, 이 줄을 @include 앞에 추가합니다.
변경을 마쳤으면 Ctrl + O로 파일을 저장하고 Ctrl + X로 편집기를 종료합니다.
SSH 데몬을 재시작합니다.
sudo systemctl restart ssh
이제부터는 SSH로 접속을 시도할 때마다 일회용 인증 코드를 입력하라는 메시지가 표시됩니다.
라즈베리 파이에 이중 인증을 설정했다면, 이제 개인 웹 서버나 음악 서버 구축 등 다음 단계로 나아갈 수 있습니다. 추가적인 팁을 활용하면 SSH 보안을 더욱 강화할 수도 있습니다.