When you manage a handful of servers, remembering hostnames works. When you hit 20, 50, or more, you need a system. The right approach depends on your scale, your team, and whether you work alone or share access.

The Problem

SSH connections accumulate. A staging server here, a production database there, a jump host, a few developer VMs. Before long you are juggling hostnames, ports, usernames, and key files. The knowledge lives in your head, in scattered notes, or in a config file that has grown unwieldy.

The real cost is not just finding the right connection — it is the context around it. Which server runs which service? What is the database URL on staging vs production? What was that one-liner you ran last month to check disk space on the app servers?

Approach 1: ~/.ssh/config

The simplest approach. Define host aliases in your SSH config file:

Host staging-app
  HostName 10.0.1.42
  User deploy
  IdentityFile ~/.ssh/staging_key
  Port 22

Then connect with ssh staging-app. This works well for small setups. You can version-control the config file (minus sensitive values) and share it with teammates.

Scales to: ~30-50 hosts before the file becomes hard to navigate. You can use wildcards and includes to organize, but there is no search, no tagging, and no GUI.

Approach 2: Standalone SSH Managers

Tools like Termius, Royal TS, or MobaXterm provide a GUI for managing connections. You organize them into folders or groups, store credentials, and connect with a click. Termius adds cloud sync and mobile apps.

The trade-off is running a separate application alongside your terminal. You manage connections in one tool and work in another. Some people prefer this separation; others find the context switching costly.

Scales to: Hundreds of connections. Team sharing via the tool's built-in sync.

Approach 3: Terminal-Integrated Management

This is the approach yaw takes. SSH connections live inside your terminal — the same app where you do your work. You save connections with tags, search them from the command palette, and connect without switching apps. Credentials are encrypted with AES-256-GCM locally.

The advantage is zero context switching. You are already in your terminal. The connection manager is a keyboard shortcut away (Ctrl+Shift+S on Windows/Linux, Cmd+Shift+S on macOS). Connections are tagged and searchable.

Broadcast Mode

When you need to run the same command across multiple servers — checking disk space, restarting a service, pulling the latest code — yaw's broadcast mode lets you type once and execute on all open panes simultaneously. Open connections to your servers, enable broadcast, and every keystroke goes to all of them.

Database Connections Too

SSH connections are often paired with database access. Yaw manages both in the same interface: SSH alongside PostgreSQL, MySQL, SQL Server, MongoDB, and Redis. One app instead of three.

Approach 4: Configuration Management

For large-scale infrastructure, tools like Ansible, Terraform, or AWS SSM Session Manager handle SSH access programmatically. Connections are defined in inventories or infrastructure-as-code, and access is managed through IAM roles or bastion hosts.

This is the right approach for large teams with dedicated DevOps. But it does not replace the need for quick, interactive SSH access when debugging or exploring.

Making Connections Shareable

Individual SSH management is one problem. Team SSH management is another. How do you share connection definitions without sharing credentials?

Try yaw on Windows

Free, no account required. Install from PowerShell:

irm https://yaw.sh/install-win.ps1 | iex

All platforms →

Related Articles