Files
ssh-mobile-client/README.md
Alex Ardhian c0c6dab473 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)
2026-08-30 14:56:46 +07:00

109 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.