문서 홈 · 사용자 매뉴얼 · 쉬운 용어집 · 최신 릴리스
이 가이드는 GitHub Release에 게시된 정식 APK(Android Package, Android 설치 파일)를 기준으로 설명합니다. 처음 설치하셔도 순서대로 진행하면 됩니다.
설치가 끝나면 다음 네 가지를 확인하게 됩니다.
- DawnShell이 영구 root 권한을 사용할 수 있습니다.
- Debian 13과 systemd가
/data/local/debian에서 실행됩니다. - 앱이 만든 SSH 키로 TCP 22에 접속됩니다.
- 재부팅 후 PIN을 입력하기 전에도 SSH가 되고, 잠금을 풀어도 같은 서버가 유지됩니다.
다음 조건이 필요합니다.
- Android 7.0(API 24) 이상을 사용합니다.
- FBE(File-Based Encryption, 파일 기반 암호화)가 켜져 있습니다.
- 기기 CPU가
armeabi-v7a,arm64-v8a,x86_64중 하나입니다. - Magisk 또는 호환되는
su가 설치되어 있습니다. - Debian을 받을 인터넷 연결과 충분한 내부 저장 공간이 있습니다.
- BFU(Before First Unlock, 최초 잠금 해제 전) 원격 접속이 필요하다면 ROM이 재부팅 후 Wi-Fi 또는 다른 네트워크를 자동으로 연결해야 합니다.
용어가 낯설다면 쉬운 용어집을 먼저 확인해 주세요. Android의 공식 Direct Boot 요구 사항은 Google 문서에서 확인할 수 있습니다.
DawnShell은 Debian을 시작할 때 root 권한이 필요합니다. ADB(Android Debug Bridge)는 필수가 아니며 문제를 확인할 때만 선택적으로 사용합니다. Google ADB 안내도 참고할 수 있습니다.
다른 SSH 서버가 이미 TCP 22 포트를 사용한다면 먼저 포트 충돌을 해결합니다. 일부 제조사 ROM에서는 DawnShell을 배터리 최적화, 절전, 자동 시작 제한 대상에서 제외하는 것을 권장합니다.
- DawnShell Releases에서 최신 정식 버전을 엽니다.
- APK와
SHA256SUMS를 같은 폴더에 받습니다. 전체 검증을 한 번에 하려면 Release의 다른 파일도 모두 받습니다.
dawnshell-<version>.apk
SHA256SUMS
SHA256SUMS는 다운로드한 파일이 배포 중에 손상되거나 바뀌지 않았는지 확인하는
목록입니다.
Release 파일을 모두 받은 Linux 셸에서는 다음과 같이 확인합니다.
sha256sum -c SHA256SUMSAPK와 checksum 파일만 받았다면 APK 항목 하나만 검사합니다.
apk='dawnshell-0.3.1.apk'
grep " $apk\$" SHA256SUMS | sha256sum -c -Release 파일을 모두 받은 macOS에서 기본 명령만 사용한다면 다음 명령을 사용합니다.
shasum -a 256 -c SHA256SUMSWindows PowerShell에서는 APK의 실제 hash와 SHA256SUMS의 해당 줄을 비교합니다.
$apk = 'dawnshell-0.3.1.apk'
$actual = (Get-FileHash ".\$apk" -Algorithm SHA256).Hash.ToLowerInvariant()
$expected = ((Get-Content .\SHA256SUMS | Where-Object { $_ -match " $([regex]::Escape($apk))$" }) -split '\s+')[0]
$actual -eq $expected파일명은 받은 버전에 맞게 바꿉니다. 마지막 결과가 True가 아니거나 APK 항목을
찾지 못하면 설치하지 말고 다시 받습니다.
GitHub Actions의 일반 artifact는 공개 debug 키로 서명된 시험용 파일일 수 있습니다. 일반 사용자는 태그에서 만들어진 정식 Release APK를 사용해 주세요. Android 앱 서명이 궁금하다면 Google 앱 서명 문서를 참고합니다.
휴대폰에서 APK를 열고, 해당 브라우저 또는 파일 앱에 “알 수 없는 앱 설치”를 일시적으로 허용합니다. 설치가 끝나면 필요하지 않은 허용을 다시 꺼도 됩니다.
ADB를 이미 사용하고 있다면 다음 방법도 가능합니다.
adb install -r dawnshell-<version>.apk같은 서명 키로 만든 업데이트는 보통 앱 데이터와 설정을 유지합니다. 다른 키로
서명된 APK는 기존 앱 위에 설치되지 않습니다. 앱을 제거하면 앱의 DE(Device
Encrypted)와 CE(Credential Encrypted) 데이터, 생성된 SSH 클라이언트 개인 키가
삭제됩니다. /data/local/debian은 앱 제거만으로 자동 삭제되지 않습니다.
Android 잠금을 해제한 상태에서 DawnShell을 엽니다.
- Magisk 루트 권한 요청 / 확인을 누릅니다.
- 승인 창에 DawnShell 패키지
me.aroxu.dawnshell이 표시되는지 확인합니다. - Magisk에서 영구 허용 또는 항상 허용을 선택합니다.
- 앱의 결과에서
exit=0,root=true,uid=0을 확인합니다.
BFU에서는 승인 화면을 띄울 수 없으므로 일회성 승인은 충분하지 않습니다. Magisk 관리자에서도 DawnShell 권한이 영구 허용인지 다시 확인해 주세요.
처음에는 다음 값을 권장합니다. USB와 영상 가속은 설치가 끝난 뒤 필요한 경우에만 켭니다.
- 다이렉트 부트 Debian 부트스트랩 활성화: 켭니다.
- CE 저장소를 읽을 수 있는 BFU 환경 허용: 끕니다.
- cgroup: **자동: cgroup v2 → v1 전환(권장)**을 선택합니다.
- Docker 네트워크: **안전한 호스트 네트워크만 사용(권장)**을 선택합니다.
- Docker host IPC: **컨테이너에 호스트 IPC 사용(권장)**을 켭니다.
- USB 공유: 끄기: raw USBFS만 차단을 선택합니다.
- 하드웨어 영상 가속: 끕니다.
그다음 하단의 공통 적용 버튼을 누릅니다. 이 버튼은 설정과 기기 CPU에 맞는 실행 파일을 DE 저장소에 준비합니다. 적용 바는 화면과 현재 설정이 다를 때만 표시됩니다.
CE 읽기 허용 옵션은 일반적으로 켜지 않습니다. Google의 Direct Boot 설계에서는 사용자가 잠금을 풀기 전 CE가 닫혀 있어야 합니다. 자세한 차이는 Google DE/CE 설명에서 확인할 수 있습니다.
- Debian 13 Trixie rootfs 설치를 누릅니다.
- 확인 창에서 설치를 승인합니다.
- 로그 → Debian 설치를 엽니다.
- 상태가
SUCCEEDED가 되고 마지막에INSTALL_SUCCEEDED가 표시될 때까지 기다립니다.
rootfs(root file system)는 Debian의 전체 파일 구조입니다. 설치 프로그램은
Debian Release 서명과 패키지 해시를 확인한 뒤 임시 위치에 설치합니다. 검증이
끝난 결과만 /data/local/debian에 게시합니다.
실패하면 로그를 먼저 복사합니다. 중단된 설치 폴더는 다음 시도 때
/data/local/debian.failed.<시간>으로 옮겨져 진단 자료로 보존됩니다.
Debian 설치가 성공한 뒤 다음 순서로 진행합니다.
- 생성된 Ed25519 공개 키가 화면에 표시되는지 확인합니다.
- Debian 13 systemd + SSH 구성을 누릅니다.
- 로그 → 시스템 구성을 엽니다.
- 상태가
SUCCEEDED, 마지막 결과가CONFIGURE_SUCCEEDED인지 확인합니다. - 상태를 눌러 systemd, D-Bus, SSH와 TCP 22가 정상인지 확인합니다.
SSH(Secure Shell)는 암호화된 원격 셸 연결 방식입니다. 기본 사용자는 debian,
기본 포트는 TCP 22입니다. 비밀번호 인증과 SSH root 직접 로그인은 꺼져 있으며,
앱이 생성한 공개 키만 허용됩니다.
외부 PC에서 접속하려면 SSH 개인 키 파일 내보내기를 누릅니다. 저장한 파일은 안전하게 PC로 옮기고 소유자만 읽을 수 있게 설정합니다.
chmod 600 dawnshell-ed25519
ssh -i ./dawnshell-ed25519 -p 22 debian@PHONE_IP같은 휴대폰의 신뢰할 수 있는 로컬 셸에서 접속하려면 다음 방법을 사용합니다.
- 로컬 셸용 개인 키 가져오기 명령 복사를 누릅니다.
- 경고를 확인하고 복사한 명령을 본인의 로컬 셸에 즉시 붙여 넣습니다.
- SSH 접속 명령 복사를 누르고 복사한 명령을 실행합니다.
첫 번째 명령에는 개인 키 전체가 포함됩니다. 클립보드는 120초 뒤 자동으로 지워지지만, 파일 내보내기가 더 안전합니다.
설정이 모두 성공한 뒤 휴대폰을 재부팅합니다. PIN, 패턴 또는 비밀번호는 아직 입력하지 않습니다. 다른 기기에서 휴대폰 주소로 접속합니다.
ssh -i ./dawnshell-ed25519 -p 22 debian@PHONE_IP접속 후 다음 명령을 확인합니다.
id
cat /proc/1/comm
systemctl is-active ssh.service
ip addr
uptime/proc/1/comm은 systemd, SSH 서비스는 active로 표시되어야 합니다. 이후
Android 잠금을 풀고 기존 SSH 연결과 Debian PID(Process Identifier) 1이 그대로
유지되는지 확인합니다.
- 새 Release의 안내와
SHA256SUMS를 확인합니다. - 같은 서명 키의 APK를 기존 앱 위에 설치합니다.
- 잠금을 해제한 상태에서 DawnShell을 한 번 엽니다.
- 설정을 바꿨고 적용 바가 표시되면 한 번 눌러 반영합니다.
- 상태를 확인하고 계획된 시점에 서버를 재시작하거나 BFU 부팅을 시험합니다.
업데이트 전에 SSH 개인 키를 별도 안전한 위치에 보관하는 것을 권장합니다.