SSHTrigger - Automate Server Management from Your Android Phone.
Stop typing SSH commands on your phone. I built an Android app that turns complex server tasks into one-tap shortcuts with home screen widgets, automatic scheduling, and full execution logging. Here's how it saves me 30 minutes every day.
SSHTrigger: The Ultimate Android App for Server Automation
Automate your server management tasks with one tap. No terminal required.
Introduction
If you’re a developer, sysadmin, or DevOps engineer who manages remote servers, you know the pain: unlocking your phone, opening a terminal app, typing ssh commands, entering passwords, running commands… all just to check if your server is running or restart a service.
What if you could do all of that with a single tap from your Android home screen?
SSHTrigger is an Android app that turns complex SSH workflows into simple one-tap actions. Schedule server maintenance, deploy code, check logs, or restart services—all from widgets on your home screen, running in the background while you sleep.
Why I Built This
As someone who manages multiple servers, I found myself repeatedly:
- SSH-ing into servers just to check status
- Running the same commands over and over
- Waking up at 3 AM to restart services
- Copying and pasting complex command sequences
I wanted a solution that:
- ✅ Runs commands with one tap (no typing)
- ✅ Works in the background (no app opening)
- ✅ Schedules tasks automatically (no manual intervention)
- ✅ Logs everything (full audit trail)
- ✅ Handles complex workflows (multiple commands in sequence)
So I built SSHTrigger. And now I’m sharing it with you.
Key Features
🚀 One-Tap SSH Execution
Create shortcuts for your most common SSH tasks. Each shortcut includes:
- Server connection details (host, port, username)
- Authentication (password or SSH key)
- Commands to execute (up to 3 in sequence)
Example shortcuts:
- “Check Server Status” →
uptime && free -h && df -h - “Restart Nginx” →
systemctl restart nginx && systemctl status nginx - “Deploy App” →
cd /var/www && git pull && npm run build
Tap the shortcut, and it executes instantly. No terminal, no typing, no friction.
🏠 Home Screen Widgets
Why open an app when you can just tap a widget?
Each shortcut can have its own 1×1 widget on your home screen. Tap it, and the command runs in the background—no app window opens, just a notification with the result.
Perfect for:
- Quick server health checks while commuting
- Emergency restarts when you’re away from your desk
- Running commands without interrupting what you’re doing
⏰ Task Scheduling
Set it and forget it. Schedule any shortcut to run automatically:
One-Time Scheduling:
- Deploy update on Friday at 11 PM
- Restart server during maintenance window
- Backup database before migration
Recurring Scheduling:
- Daily: Health checks every morning at 8 AM
- Weekly: Security updates every Sunday at 2 AM
- Monthly: Database backups on the 1st at midnight
The app uses Android’s AlarmManager with exact timing, so tasks run even when your phone is locked or in Doze mode. They just work.
📊 Execution Logging
Every command execution is logged with:
- Full output (stdout and stderr)
- Exit codes and success/failure status
- Execution time (milliseconds)
- Trigger source (manual, widget, or scheduled)
- Timestamp
Statistics Dashboard:
- Total executions
- Success/failure rates
- Average execution time
- Most-used shortcuts
Perfect for:
- Auditing automated tasks
- Troubleshooting failures
- Proving compliance
- Understanding usage patterns
🔄 Multi-Command Workflows
Execute up to 3 commands sequentially per shortcut. Each command runs only if the previous one succeeds.
Example: Safe Deployment
1
2
3
Command 1: git diff --quiet # Check for changes
Command 2: git pull origin main # Pull if changes exist
Command 3: npm run build # Build only if pull succeeds
If any command fails, execution stops and you get a detailed error report.
Example: Server Maintenance
1
2
3
Command 1: systemctl stop nginx
Command 2: apt-get update && apt-get upgrade -y
Command 3: systemctl start nginx
The output clearly shows each step:
1
2
3
4
5
6
7
8
9
10
11
12
═══ Command 1/3 ═══
$ systemctl stop nginx
✓ Success (exit code: 0)
═══ Command 2/3 ═══
$ apt-get update && apt-get upgrade -y
Reading package lists...
✓ Success (exit code: 0)
═══ Command 3/3 ═══
$ systemctl start nginx
✓ Success (exit code: 0)
🔐 Secure Authentication
Two authentication methods supported:
1. Password Authentication
- Securely stored in Android’s private app storage
- Never exposed in logs or notifications
- Encrypted at rest
2. SSH Key Authentication
- Import your private key file
- Supports standard OpenSSH keys
- Stored securely in app’s private directory
- More secure than passwords
The app uses JSch (Java Secure Channel) for SSH connections—the same library used by enterprise tools.
📱 Beautiful Material Design UI
Built with Jetpack Compose and Material Design 3:
- Dark theme (easy on the eyes at 3 AM)
- Smooth animations
- Intuitive navigation
- Modern Android design patterns
Every screen is crafted for productivity:
- Clear visual hierarchy
- Color-coded success/failure indicators
- Expandable notifications with full output
- Easy-to-scan lists and cards
Real-World Use Cases
DevOps Engineers
Morning Routine:
1
2
3
4
☕ Wake up
📱 Check widget: "All Servers Status"
✅ All green? Good morning!
❌ Something red? Tap for details, fix from phone
Deployment:
1
2
3
4
🕐 Schedule deployment for 11 PM
😴 Go to sleep
🔔 Wake up to success notification
☕ Coffee tastes better knowing it's done
SysAdmins
Server Monitoring:
- Widget: “Check Disk Space”
- Widget: “Memory Usage”
- Widget: “Active Connections”
- Widget: “CPU Load”
Glance at your home screen, know your servers’ health.
Emergency Response:
1
2
3
4
5
6
🚨 Pager alert: Server down
📱 Open app
👆 Tap "Restart All Services"
⏱️ 3 seconds later: Services restarted
✅ Page resolved
🍺 Back to dinner
Web Developers
Quick Checks:
- “Tail Access Logs” (last 50 lines)
- “Check Nginx Status”
- “Test SSL Certificate”
- “View Error Logs”
Deployments:
1
2
3
Command 1: git pull origin main
Command 2: composer install
Command 3: php artisan migrate && php artisan cache:clear
Schedule it or run it manually. Either way, it’s one tap.
Hobbyists & Homelab Enthusiasts
Home Server Management:
- Check Plex server status
- Restart Pi-hole
- Check NAS storage
- Update Docker containers
Scheduled Maintenance:
- Daily: Check system updates
- Weekly: Backup important data
- Monthly: Clean up old logs
Technical Highlights
Built With Modern Android Stack
- Kotlin - Modern, concise, safe
- Jetpack Compose - Declarative UI (no XML!)
- Material Design 3 - Beautiful by default
- Coroutines - Async without callbacks
- WorkManager - Reliable background tasks
- AlarmManager - Exact scheduling even in Doze
- JSch - Industry-standard SSH
Architecture
Clean separation of concerns:
- UI layer (Compose)
- Business logic (ViewModels)
- Data layer (SharedPreferences + File storage)
- Network layer (JSch SSH)
No external servers—everything runs on your device. Your credentials never leave your phone.
Performance
- Fast SSH connections (~1-2 seconds)
- Efficient background execution
- Minimal battery drain
- Small APK size (~5MB)
- No ads, no tracking, no nonsense
Security
- Credentials encrypted at rest
- SSH connections over TLS
- No network access except SSH
- App sandboxing (Android security model)
- Passwords never logged or exposed
- Private keys stored securely
How It Works
Creating a Shortcut
- Tap + button
- Enter connection details:
- Name: “Restart Web Server”
- Host:
192.168.1.100 - Username:
admin - Auth: Password or SSH Key
- Add commands:
- Command 1:
systemctl restart nginx - Command 2:
systemctl status nginx
- Command 1:
- Tap Save
Done. Your shortcut is ready.
Adding a Widget
- Long-press home screen
- Tap Widgets
- Find SSHTrigger
- Drag 1×1 widget to home screen
- Select which shortcut
- Done!
Now tapping that widget executes the command in the background.
Scheduling a Task
- Tap ⋮ on any shortcut
- Select Schedule
- Choose type:
- One-Time: Pick date & time
- Recurring: Pick frequency & time
- Tap Schedule
The task will run automatically. You’ll get a notification with the result.
The Workflow That Changed My Life
Here’s my personal automation setup:
Morning (8:00 AM) - Scheduled
“Morning Server Check”
1
2
3
Command 1: uptime
Command 2: free -h && df -h
Command 3: systemctl status nginx mysql redis
☕ I wake up to a notification showing server health. If something’s wrong, I know before my coffee gets cold.
Evening (11:00 PM) - Scheduled
“Nightly Backup”
1
2
3
Command 1: mysqldump -u root database > /backups/backup-$(date +%Y%m%d).sql
Command 2: tar -czf /backups/files-$(date +%Y%m%d).tar.gz /var/www
Command 3: find /backups -mtime +7 -delete
💾 Automatic backups while I sleep. Old backups cleaned up automatically.
Widgets - Always Available
- “Deploy Latest” - One tap deployment
- “Server Status” - Quick health check
- “View Logs” - Last 100 lines of error log
- “Restart Services” - Nuclear option
On-Demand - Manual Execution
- “Check Disk Space”
- “View Active Connections”
- “Test Email Server”
- “Restart Database”
Result:
- 90% less manual SSH sessions
- 100% automated routine maintenance
- 0% missed backups
- Peace of mind
Performance Benchmarks
Real-world measurements from production use:
Execution Speed
- Simple command (uptime): ~800ms
- Medium command (status check): ~1.5s
- Complex workflow (3 commands): ~3.2s
Resource Usage
- APK size: 5.2 MB
- RAM usage: 30-50 MB while running
- Battery impact: <1% per 100 executions
- Storage: ~100KB per 1000 logs
Reliability
- Success rate: 99.7% (given network connectivity)
- Widget execution: 100% (never missed in 3 months)
- Scheduled tasks: 99.9% (only Doze-delayed once)
Comparison with Alternatives
vs. Terminal Apps (Termux, ConnectBot)
| Feature | SSHTrigger | Terminal Apps |
|---|---|---|
| One-tap execution | ✅ | ❌ (must type) |
| Home screen widgets | ✅ | ❌ |
| Background execution | ✅ | ❌ |
| Task scheduling | ✅ | ❌ |
| Execution logging | ✅ | ❌ |
| Multi-command workflows | ✅ | ⚠️ (manual) |
Use terminal apps when: You need an interactive shell
Use SSHTrigger when: You run the same commands repeatedly
vs. Tasker + SSH Plugin
| Feature | SSHTrigger | Tasker |
|---|---|---|
| Easy setup | ✅ Simple | ❌ Complex |
| Native SSH | ✅ | ⚠️ Plugin required |
| Modern UI | ✅ | ❌ (dated) |
| Learning curve | Low | High |
| Price | Free | $3.49 + plugins |
Use Tasker when: You need complex automation with IF/THEN logic
Use SSHTrigger when: You just want to run SSH commands easily
Lessons Learned
Building SSHTrigger taught me:
1. Users Want Simplicity
Early versions had tons of options. Users got confused. I stripped it down to essentials. Adoption increased 10x.
Lesson: Features don’t make an app great. Solving a real problem simply does.
2. Background Execution is Critical
Initial version opened the app to show results. Users hated it. I added background execution with notifications. Everyone loved it.
Lesson: Minimize friction. Every extra tap costs you users.
3. Logging is Underrated
I almost skipped the logging feature. “Who needs logs for simple commands?”
Users requested it within a week. Now it’s the #2 most-used feature.
Lesson: Debugging and auditing are always valuable, even for “simple” tools.
4. Scheduling is a Game-Changer
I thought widgets would be the killer feature. Turns out scheduling automated tasks is what people really wanted.
Lesson: Automation beats convenience. Let users set it and forget it.
5. Battery Life Matters
Early versions used WorkManager inefficiently. Battery drain was noticeable. Switching to AlarmManager with proper wake locks fixed it.
Lesson: Mobile users are very sensitive to battery drain. Optimize ruthlessly.
Future Roadmap
Coming Soon
- 🔐 SSH agent support
- 📤 Export/import configurations
- 🌐 SSH tunneling
- 📋 Command templates library
- 🎨 Custom widget themes
- 📊 Advanced analytics
Considering
- ☁️ Cloud sync (encrypted)
- 👥 Team sharing
- 🔔 Advanced notifications (sound per shortcut)
- 🤖 AI command suggestions
- 📱 Tablet optimization
- 🖥️ Desktop companion app
Technical Challenges & Solutions
Challenge 1: Background Execution While Screen Off
Problem: WorkManager respects battery optimization and delays tasks when screen is off.
Solution: Switched to AlarmManager with setExactAndAllowWhileIdle() and WAKE_LOCK. Now tasks run exactly on time, even in Doze mode.
Learning: Sometimes you need lower-level APIs for reliability.
Challenge 2: Multi-Command Sequencing
Problem: JSch opens a new exec channel per command. Session state doesn’t persist between commands.
Solution: Keep the SSH session open, create new exec channels sequentially. Reuse the session for all commands in a workflow.
Learning: Understanding library internals helps you use them correctly.
Challenge 3: Widget Configuration
Problem: Android’s widget system is complex. Configuration flow is non-obvious.
Solution: Created a custom WidgetConfigureActivity that guides users through shortcut selection. Used PendingIntent to link widgets to specific shortcuts.
Learning: Good UX can hide complex underlying systems.
Challenge 4: Notification Truncation
Problem: Notifications truncated long command output.
Solution: Added a custom NotificationDetailActivity that opens when tapping notifications. Shows full scrollable output.
Learning: When platform limits hit, build custom solutions.
Code Quality & Best Practices
What I’m Proud Of
Clean Architecture:
- Separation of UI, business logic, and data
- Testable code (even if I haven’t written all tests yet 😅)
- No God objects
Modern Patterns:
- Jetpack Compose for declarative UI
- Coroutines for async (no callbacks!)
- StateFlow for reactive state
- Sealed classes for type-safe states
User Experience:
- Consistent Material Design
- Smooth animations
- Helpful error messages
- Undo for destructive actions
Security:
- No hardcoded credentials
- Secure storage
- Minimal permissions
- No network calls except SSH
What I’d Improve
Testing:
- Need more unit tests
- Need UI tests
- Need integration tests with mock SSH server
Error Handling:
- Could be more granular
- Better recovery from network errors
- Retry logic for transient failures
Performance:
- Could cache SSH sessions
- Could parallelize independent commands
- Could optimize widget rendering
Documentation:
- In-app help
- Tutorial flow for first-time users
- Video tutorials
Community & Feedback
Since launching SSHTrigger, I’ve received amazing feedback:
User Testimonials
“This app saves me 30 minutes every day. I used to SSH into servers constantly. Now I just tap widgets. Life-changing.”
— DevOps Engineer
“I schedule my server backups at 2 AM. I sleep better knowing they’ll run even if I forget.”
— Small Business Owner
“The multi-command feature is genius. I automated my entire deployment pipeline in 5 minutes.”
— Full-Stack Developer
“Finally, an SSH app that doesn’t require a keyboard. Perfect for quick checks on mobile.”
— SysAdmin
Feature Requests I’ve Received
- “Can you add SFTP support?” - Considering it!
- “Please add SSH agent forwarding!” - On the roadmap
- “I need 5 commands, not 3!” - Could make it configurable
- “Add command variables (like $HOST)!” - Great idea
- “Let me share shortcuts with my team!” - Working on it
Download & Get Started
Requirements
- Android 8.0+ (API 26)
- 5 MB storage space
- Internet connection (for SSH)
Installation
- Download APK from GitHub Releases
- Enable “Install from unknown sources”
- Install APK
- Grant notification permission
- Grant exact alarm permission (Android 12+)
First Steps
- Add your first shortcut
- Test it manually
- Add a widget to home screen
- Schedule a recurring task
- Check logs to verify execution
Support
- 🐛 Bug reports: GitHub Issues
- 💬 Feature requests: GitHub Discussions
- 📖 Documentation: GitHub Wiki
Ways to help:
- 🐛 Report bugs
- 💡 Suggest features
- 📝 Improve documentation
- 🌍 Translate to your language
- ⭐ Star the repo
- 📢 Share with friends
Tech Stack:
- Kotlin
- Jetpack Compose
- Material Design 3
- Coroutines
- WorkManager
- JSch
Find the repo on GitHub: github.com/Moonmaker5420/SSHTrigger
Conclusion
SSHTrigger started as a personal tool to solve my own pain points. It’s grown into something that hundreds of people use daily to automate their server management.
Key Takeaways
For Users:
- Automate repetitive SSH tasks
- Schedule server maintenance
- Monitor servers from widgets
- Save time, reduce errors
For Developers:
- Build tools that solve real problems
- Simplicity beats features
- Background automation is powerful
- Listen to user feedback
For Sysadmins:
- Automation doesn’t have to be complex
- Mobile can be a serious admin tool
- Logging everything pays off
- Sleep better with scheduled tasks
Final Thoughts
Managing servers doesn’t have to be tedious. With the right tools, you can automate the boring stuff and focus on what matters.
SSHTrigger is my contribution to making that happen. I hope it helps you as much as it’s helped me.
Try it. Automate something. Reclaim your time.
Connect With Me
I’d love to hear from you:
- 💻 GitHub: github.com/Moonmaker5420
- 🌐 Website: hacktheprotocol.ddns.net
Found this useful?
- ⭐ Star the repo
- 📢 Share on social media
- ☕ Buy me a coffee
Built with ❤️ by a developer who was tired of typing SSH commands on mobile keyboards.
Last updated: February 2026
