Post

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 - Automate Server Management from Your Android Phone.

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:

  1. Runs commands with one tap (no typing)
  2. Works in the background (no app opening)
  3. Schedules tasks automatically (no manual intervention)
  4. Logs everything (full audit trail)
  5. 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

  1. Tap + button
  2. Enter connection details:
    • Name: “Restart Web Server”
    • Host: 192.168.1.100
    • Username: admin
    • Auth: Password or SSH Key
  3. Add commands:
    • Command 1: systemctl restart nginx
    • Command 2: systemctl status nginx
  4. Tap Save

Done. Your shortcut is ready.

Adding a Widget

  1. Long-press home screen
  2. Tap Widgets
  3. Find SSHTrigger
  4. Drag 1×1 widget to home screen
  5. Select which shortcut
  6. Done!

Now tapping that widget executes the command in the background.

Scheduling a Task

  1. Tap on any shortcut
  2. Select Schedule
  3. Choose type:
    • One-Time: Pick date & time
    • Recurring: Pick frequency & time
  4. 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

  1. “Can you add SFTP support?” - Considering it!
  2. “Please add SSH agent forwarding!” - On the roadmap
  3. “I need 5 commands, not 3!” - Could make it configurable
  4. “Add command variables (like $HOST)!” - Great idea
  5. “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

  1. Download APK from GitHub Releases
  2. Enable “Install from unknown sources”
  3. Install APK
  4. Grant notification permission
  5. Grant exact alarm permission (Android 12+)

First Steps

  1. Add your first shortcut
  2. Test it manually
  3. Add a widget to home screen
  4. Schedule a recurring task
  5. Check logs to verify execution

Support


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:

Found this useful?


Built with ❤️ by a developer who was tired of typing SSH commands on mobile keyboards.

Last updated: February 2026

This post is licensed under CC BY 4.0 by the author.