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:
108
README.md
Normal file
108
README.md
Normal 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.
|
||||
Reference in New Issue
Block a user