SSH Mobile Client Android v1.0: terminal interaktif + SSH engine + profil tersimpan

- SSH 2.x via sshj, PTY xterm-256color interaktif
- Terminal emulator self-contained (model + parser ANSI + custom View):
  16/256/TrueColor, cursor, clear, scrollback, seleksi+copas, pinch-zoom
- SSH engine: auth password/private-key, reconnect dengan backoff, keep-alive 60s
- Profil server tersimpan dengan kredensial terenkripsi (EncryptedSharedPreferences)
- UI: daftar profil, editor profil, layar terminal + keyboard khusus + toolbar
- 6 tema terminal build-in + font monospace
- Build terverifikasi: assembleDebug SUCCESS, lintDebug 0 error (APK 11MB)
This commit is contained in:
2026-08-30 14:56:46 +07:00
commit c0c6dab473
32 changed files with 2447 additions and 0 deletions

108
README.md Normal file
View File

@@ -0,0 +1,108 @@
# SSH Mobile Client — Android
A proper, interactive SSH client for Android, built natively in Kotlin. Designed like
Termux-style terminals so **vim, nano, htop, tmux, top, ssh, and other interactive CLIs**
work correctly over a real PTY.
> **Status: ter-build & terverifikasi.** Pada 2026-08-30 proyek ini berhasil dikompilasi
> penuh (Gradle `assembleDebug`) dan diproduksi APK (11 MB). Repo berisi project
> Kotlin/AndroidStudio lengkap — tinggal buka di Android Studio atau build via CLI.
## ✨ Fitur (versi 1.0)
| Area | Dukungan |
|------|----------|
| **SSH 2.x** | sshj 0.38 (SSH-2), handshake modern (RSA/ECDSA/ED25519) |
| **PTY interaktif** | `xterm-256color` PTY, shell interaktif penuh |
| **ANSI warna** | 16 + 256 + TrueColor (24-bit) SGR — parser ditulis sendiri |
| **Font custom** | ukuran font diatur (pinch-to-zoom 14–60px), monospace |
| **Tema terminal** | 6 tema built-in (Hijau, Tango, Solarized×2, Gruvbox, Material) + Dark UI |
| **Keyboard khusus** | Baris Ctrl/Alt/Esc/Tab/panah/PgUp/PgDn/Del |
| **Copy/paste & seleksi** | Seleksi teks → salin ke clipboard, tempel ke sesi |
| **Autentikasi** | Password / private key (+passphrase) |
| **Profil server** | Simpan banyak profil (nama, host, port, user, tema, ukuran font) |
| **Kredensial aman** | `EncryptedSharedPreferences` (Tink/GCM) — semua tersimpan terenkripsi |
| **Reconnect & keep-alive** | Reconnect otomatis dengan backoff + keep-alive SSH (60s) |
| **Orientasi** | Portrait & landscape — PTY di-resize otomatis mengikuti layout |
> **Backlog:** SFTP browser, host-key pinning (known_hosts), manajemen key dari file,
> toggle Dark/Light saat runtime.
## 🏗️ Arsitektur
```
app/src/main/java/com/kosbarokah/sshclient/
├── data/
│ ├── ServerProfile.kt # model profil + ThemePreset (16-warna & tema)
│ └── SecureStore.kt # simpan profil + kredensial terenkripsi
├── ssh/
│ └── SshEngine.kt # koneksi SSH (sshj), PTY, auth, reconnect, keep-alive
├── terminal/
│ ├── TerminalModel.kt # buffer layar + scrollback + sel (warna/atribut)
│ ├── TerminalParser.kt # parser ANSI/VT100 (16/256/TrueColor, cursor, clear)
│ ├── TerminalView.kt # View custom: render, seleksi, copy, pinch-zoom
│ ├── TerminalScheme.kt # data skema warna (palette + bg/fg/cursor)
│ └── TerminalController.kt # perekat: parser ↔ SSH ↔ View
├── keyboard/
│ └── KeySequences.kt # byte sequence key khusus (Esc, panah, Ctrl, dst)
└── ui/
├── ConnectActivity.kt # daftar profil ter-simpan
├── ProfileEditorActivity.kt # tambah/edit/delete profil + kredensial
└── TerminalActivity.kt # layar terminal + toolbar + key bar
```
## 🚀 Cara Membangun (Android Studio)
1. **Buka** folder ini di Android Studio (Flutter? Tidak — ini native Kotlin/Gradle).
2. Pastikan SDK `android-34` & build-tools `34.0.0` terinstal (Android Studio akan
menawarkan secara otomatis).
3. Sync Gradle — semua dependensi (sshj, security-crypto, Material, coroutines)
diambil dari Maven Central / Google.
4. **Run** di emulator atau perangkat Android (minSdk 26 / Android 8.0+).
Bisa juga via **command-line** (tanpa Android Studio):
```bash
# Prasyarat di mesin pengembang:
# - JDK 17
# - Android SDK command-line tools (platform android-34, build-tools 34.0.0)
# - Gradle 8.9 (atau buka di Android Studio yang membawa Gradle sendiri)
export ANDROID_HOME=/path/to/Sdk # sesuaikan dengan lokasi SDK-mu
gradle :app:assembleDebug # hasil: app/build/outputs/apk/debug/app-debug.apk
```
> Catatan: tidak ada `gradlew` wrapper di proyek ini; gunakan Gradle yang terinstal
> (8.9) atau buka via Android Studio (yang menyediakan Gradle sendiri).
## 🧪 Verifikasi Build
Pada 2026-08-30 yang lalu, hasil build di jalur produksi:
- `gradle :app:assembleDebug` → **BUILD SUCCESSFUL**, APK 11 MB diproduksi
- `gradle :app:lintDebug` → **0 error** (hanya warning versi dependency yang tidak wajib di-*upgrade*)
- Struktur lengkap: 13 file Kotlin, 10 resource XML, `AndroidManifest.xml`, Gradle config
> Catatan: terminal emulator **diimplementasikan sendiri** (tanpa library pihak ketiga)
> supaya build bersih & dependable. `TerminalParser` menangani subset ANSI yang cukup
> untuk vim/nano/htop/tmux/top: SGR warna (16/256/TrueColor), cursor movement/clear,
> scrollback, dan OSC (ignored body). Karena tidak ada emulator Android di lingkungan
> build ini, verifikasi dibatasi pada compile + resource + lint; uji runtime tetap perlu
> di perangkat/emulator.
## 🔐 Keamanan
- Semua profil & kredensial disimpan lewat `EncryptedSharedPreferences` (master key
AES256-GCM dari Android Keystore, nilai dienkripsi AES256-GCM).
- Private key & passphrase tidak pernah diserialisasi sebagai teks polos ke disk.
- Host key verifier v1 bersifat "terima semua" dengan catatan TODO untuk pinning
known_hosts di rilis berikut (terbilang di backlog).
## 🖥️ Skenario Penggunaan
- SSH ke server/cantor untuk akses shell jarak jauh.
- Menjalankan editor terkesan: `vim`, `nano`, `htop`, `tmux`, `ssh`, `kubectl`.
- Warna penuh untuk `ls -la --color`, `bat`, `lsd`, `fzf`, `grep --color`.
- Simpan beberapa profil server untuk akses satu-ketukan.
## 📄 Lisensi
Kode contoh internal — untuk digunakan oleh project Kos Barokah.