Full interactive terminal via SwiftTerm, About sheet, English docs
This commit is contained in:
@@ -1,63 +1,69 @@
|
||||
# RemminaMac — SSH / RDP Client für macOS
|
||||
# RemminaMac — SSH / RDP Client for macOS
|
||||
|
||||

|
||||
|
||||
Remmina-inspirierter Connection-Manager für macOS, nativ in Swift + SwiftUI.
|
||||
Remmina-inspired connection manager for macOS, native Swift + SwiftUI.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Layout wie Remmina: **links Profil-Liste mit Suche + Gruppen, rechts Verbindungs-Tabs, unten Statusbar.**
|
||||
Remmina-style layout: **profile list with search + groups on the left, connection tabs on the right, status bar at the bottom.**
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
## Contents
|
||||
- [Features](#features)
|
||||
- [Screenshots / Layout](#screenshots--layout)
|
||||
- [Schnellstart](#schnellstart)
|
||||
- [Layout](#layout)
|
||||
- [Quick start](#quick-start)
|
||||
- [Installation](docs/INSTALL.md)
|
||||
- [Benutzung](docs/USAGE.md)
|
||||
- [Architektur](docs/ARCHITECTURE.md)
|
||||
- [SSH-Keys & Sicherheit](#ssh-keys--sicherheit)
|
||||
- [RDP / VNC unter macOS](#rdp--vnc-unter-macos)
|
||||
- [Profile-Format](#profile-format)
|
||||
- [Release-Binary](#release-binary)
|
||||
- [Fehlerprotokoll](docs/ERRORS.md)
|
||||
- [Usage](docs/USAGE.md)
|
||||
- [Architecture](docs/ARCHITECTURE.md)
|
||||
- [SSH keys & security](#ssh-keys--security)
|
||||
- [RDP / VNC on macOS](#rdp--vnc-on-macos)
|
||||
- [Profile format](#profile-format)
|
||||
- [Release binaries](#release-binaries)
|
||||
- [Error log](docs/ERRORS.md)
|
||||
- [Roadmap](#roadmap)
|
||||
- [Lizenz](#lizenz)
|
||||
- [License](#license)
|
||||
|
||||
## Features
|
||||
- GUI im Remmina-Layout (`Views/ContentView.swift`):
|
||||
- Sidebar: Gruppen-Picker, Suche, Profil-Liste, Doppelklick = Verbinden
|
||||
- Detail: Tab-Ansicht offener Sitzungen, Verbindungsdetails, Statusbar
|
||||
- Toolbar: Neu / Bearbeiten / Duplizieren / Verbinden / Quick-Connect / SSH-Keys
|
||||
- Profile laden / speichern / duplizieren / löschen
|
||||
- GUI in Remmina layout (`Views/ContentView.swift`):
|
||||
- Sidebar: group picker, search, profile list, double-click = connect
|
||||
- Detail: tabbed open sessions, connection details, status bar
|
||||
- Toolbar: New / Edit / Duplicate / Connect / Quick-Connect / SSH keys / Info
|
||||
- Load / save / duplicate / delete profiles
|
||||
- JSON in `~/Library/Application Support/RemminaMac/profiles.json`
|
||||
- Export / Import (siehe Benutzung)
|
||||
- Protokolle: SSH, SFTP, RDP, VNC (`Models/ConnectionProfile.swift:3`)
|
||||
- SSH-Keys speichern & verwalten (`Views/SSHKeysView.swift`):
|
||||
- Import aus `~/.ssh`, Datei-Picker, `ssh-keygen`-Wrapper (ed25519)
|
||||
- Passphrases in macOS Keychain (`Security/KeychainHelper.swift`)
|
||||
- Passwörter in Keychain, nie im Klartext-JSON
|
||||
- SSH via System-`ssh` in Terminal.app (`Services/ConnectionServices.swift:6`)
|
||||
- RDP via FreeRDP (`xfreerdp`) oder Fallback Microsoft Remote Desktop
|
||||
- VNC via `vnc://`-Scheme
|
||||
- Validation + trimming in the editor, copyable error reports
|
||||
- Protocols: SSH, SFTP, RDP, VNC (`Models/ConnectionProfile.swift`)
|
||||
- Full interactive terminal per tab (SwiftTerm emulator, Dracula themed):
|
||||
cursor addressing, colors, scrollback, Tab completion, arrows, Ctrl+C,
|
||||
full-screen apps (vim/htop). Real PTY + controlling terminal via `ctty-run`.
|
||||
- Host-key fingerprint popup (accept/decline, MITM warning on change),
|
||||
shared `~/.ssh/known_hosts` with Terminal.app
|
||||
- SSH key management (`Views/SSHKeysView.swift`):
|
||||
import from `~/.ssh`, file picker, `ssh-keygen` wrapper (ed25519)
|
||||
- Passwords/passphrases in macOS Keychain only, never in JSON
|
||||
- Auto-login via `sshpass` (if installed) or interactive prompt
|
||||
- TCP pre-check with plain-language diagnostics before connecting
|
||||
- RDP via FreeRDP (`xfreerdp`) or Microsoft Remote Desktop fallback
|
||||
- VNC via `vnc://` scheme
|
||||
- About sheet with contributor + repository link
|
||||
|
||||
## Screenshots / Layout
|
||||
## Layout
|
||||
```
|
||||
+-------------------------------------------------------------+
|
||||
| Toolbar: [+][Edit][Copy][Key] | [▶ Verbinden][⚡Quick] |
|
||||
| Toolbar: [+][Edit][Copy][Key][i] | [▶ Connect][⚡Quick] |
|
||||
+------+-------------------------------+--------------------+
|
||||
| Gruppe | Tab: Webserver | Büro-PC | ... | Detail |
|
||||
| Suche +-------------------------------+ |
|
||||
| - Webserver | Verbindungsdetails (Befehl)| |
|
||||
| - Büro-PC | Hinweis | |
|
||||
| - Dateiserver+-------------------------------+ |
|
||||
| Group | Tab: Webserver | Office-PC | ... | Detail |
|
||||
| Search +-------------------------------+ |
|
||||
| - Webserver | Full terminal (SwiftTerm) | |
|
||||
| - Office-PC | Connection details (cmd) | |
|
||||
| - Fileserver +-------------------------------+ |
|
||||
+------+-------------------------------+--------------------+
|
||||
| Statusbar: ● Bereit ... N Profile · M Sitzungen |
|
||||
| Statusbar: ● Ready ... N profiles · M sessions |
|
||||
+-------------------------------------------------------------+
|
||||
```
|
||||
|
||||
## Schnellstart
|
||||
## Quick start
|
||||
```bash
|
||||
cd RemminaMac
|
||||
swift build
|
||||
@@ -67,19 +73,21 @@ open Package.swift
|
||||
# Target RemminaMac → My Mac → Run
|
||||
```
|
||||
|
||||
## SSH-Keys & Sicherheit
|
||||
- Private-Key-Pfade stehen in `sshkeys.json`, Passphrases nur in Keychain.
|
||||
- Service-Name: `RemminaMac`, Accounts: `profile-<UUID>`, `sshkey-<UUID>`.
|
||||
- Keychain lesen/schreiben: `Security/KeychainHelper.swift:5`.
|
||||
- Es werden keine Secrets ins Git-Repo geschrieben (siehe `.gitignore`).
|
||||
## SSH keys & security
|
||||
- Private key paths live in `sshkeys.json`, passphrases in Keychain only.
|
||||
- Service name: `RemminaMac`, accounts: `profile-<UUID>`, `sshkey-<UUID>`.
|
||||
- Keychain access: `Security/KeychainHelper.swift`.
|
||||
- No secrets are committed to the repo (see `.gitignore`).
|
||||
- Passwords reach ssh via `SSHPASS` env (with sshpass) or the interactive
|
||||
terminal prompt — never via command line or logs.
|
||||
|
||||
## RDP / VNC unter macOS
|
||||
## RDP / VNC on macOS
|
||||
- Optional: `brew install freerdp`
|
||||
- Mit FreeRDP: `xfreerdp /v:HOST:PORT /u:USER [/size:WxH | /f]`
|
||||
- Ohne: `rdc://` → Microsoft Remote Desktop (aus App Store installieren)
|
||||
- With FreeRDP: `xfreerdp /v:HOST:PORT /u:USER [/size:WxH | /f]`
|
||||
- Without: `rdc://` → Microsoft Remote Desktop (install from App Store)
|
||||
- VNC: `open vnc://host:port`
|
||||
|
||||
## Profile-Format
|
||||
## Profile format
|
||||
```json
|
||||
[
|
||||
{
|
||||
@@ -91,7 +99,7 @@ open Package.swift
|
||||
"username": "admin",
|
||||
"group": "Server",
|
||||
"colorTag": "blue",
|
||||
"resolution": "Automatisch",
|
||||
"resolution": "Automatic",
|
||||
"sshKeyID": null,
|
||||
"passwordAccount": "profile-UUID",
|
||||
"extraArgs": "",
|
||||
@@ -100,12 +108,12 @@ open Package.swift
|
||||
]
|
||||
```
|
||||
|
||||
## Release-Binary
|
||||
Fertige Binaries liegen unter Git-Releases (`dist/` wird lokal gebaut, nicht committet):
|
||||
## Release binaries
|
||||
Prebuilt binaries on Git releases (`dist/` is built locally, never committed):
|
||||
```bash
|
||||
./scripts/build-release.sh
|
||||
./scripts/build-app.sh # RemminaMac.app für /Applications
|
||||
./scripts/build-dmg.sh # DMG mit Drag-and-drop auf Programme
|
||||
./scripts/build-release.sh 0.7.0
|
||||
./scripts/build-app.sh 0.7.0 # RemminaMac.app for /Applications
|
||||
./scripts/build-dmg.sh 0.7.0 # DMG with drag-and-drop to Applications
|
||||
# → dist/RemminaMac-<version>-macos-arm64.zip + .sha256
|
||||
# → dist/RemminaMac-<version>-macos-arm64.dmg + .sha256
|
||||
ls dist/
|
||||
@@ -113,11 +121,11 @@ ls dist/
|
||||
Details: [docs/INSTALL.md](docs/INSTALL.md), [docs/RELEASING.md](docs/RELEASING.md).
|
||||
|
||||
## Roadmap
|
||||
- [ ] Eingebettetes Terminal (SwiftTerm + swift-nio-ssh)
|
||||
- [ ] Echte RDP-Einbettung (FreeRDP-Bridge) statt externem Prozess
|
||||
- [ ] SFTP-Browser integriert
|
||||
- [ ] Export/Import-Buttons in der GUI
|
||||
- [ ] Tray / Favoriten / Ordner-Badges wie Remmina
|
||||
- [x] Embedded full terminal (SwiftTerm) — done in 0.7.0
|
||||
- [ ] Embedded RDP (FreeRDP bridge) instead of external process
|
||||
- [ ] Integrated SFTP browser
|
||||
- [ ] Export/Import buttons in the GUI
|
||||
- [ ] Tray / favorites / folder badges like Remmina
|
||||
|
||||
## Lizenz
|
||||
MIT — siehe `LICENSE`.
|
||||
## License
|
||||
MIT — see `LICENSE`.
|
||||
|
||||
Reference in New Issue
Block a user