SSH Config Summary
{{ hosts.length }} {{ hosts.length===1 ? 'host' : 'hosts' }}
Grouped: {{ groupingLabel }}
Groups {{ groupedHosts.length }} Known keys {{ knownKeys.length }} Wildcards {{ wildcardHostCount }} {{ lintResults.length }} warning(s) Alerts {{ securityCounts.total }}

          
Drop a file or paste SSH config to begin.
Search
{{ matchCount }} match(es)
Host blocks
No hosts loaded yet. Paste a config above or click “Add host” to start fresh.
No hosts match the current filter.
Drag-and-drop ordering is available when alphabetical sorting is off and no search filter is applied.
{{ item.title }}
Key Value Actions
No directives yet. Use “Add line”.
Host Domain Keys Wildcard Copy
{{ r.host }} {{ r.domain || '—' }} {{ r.keyCount }} {{ r.wild ? 'Yes' : 'No' }}
No rows

        
HostIssueCopy
{{ w.host }} {{ w.issue }}
No issues found.
No security concerns detected with the current configuration.
Severity Host Issue Recommendation Copy
{{ finding.severityLabel }} {{ finding.host || 'Global' }} {{ finding.issue }} {{ finding.recommendation }}
Directive insights will appear once hosts and directives are loaded.
Directive Hosts Unique values Missing Example value Copy
{{ row.key }} {{ row.hostCount }} {{ row.uniqueValues }} {{ row.missingHosts }} {{ row.sampleValue || '—' }}
Load a baseline configuration to compare changes.
No changes detected against the imported baseline.
{{ line.marker }} {{ line.text }}
Note: This tool cannot directly save to ~/.ssh/config. Download and replace it manually when done.
:

Introduction:

Secure Shell client configuration files are plain text lists that map host names to connection settings and identities. They shape how you reach development and production systems and they influence safety and convenience each time you connect.

Editing by eye invites drift across environments and small differences can weaken authentication or open tunnels you did not intend. This editor reads a pasted file or a dropped file and organizes host blocks so you can review patterns and options with less guesswork.

A built in security audit highlights common risks in clear language and suggests practical fixes you can apply in place. A simple match tester shows which host patterns catch a sample name so you understand how wildcards behave before you deploy changes.

Results appear instantly as you type so you can refine values and copy a clean file for the next review. For sensitive work, prefer test values and rotate secrets separately after peers approve the changes.

Technical Details:

Secure Shell configuration files describe connection options per host pattern. Each host block begins with the word Host followed by one or more patterns, then a list of directive name and value pairs. The parser separates host blocks from non host lines and preserves comments and global lines when requested.

The analyzer computes coverage for each directive, identifies lint issues, and evaluates security findings. Findings are grouped into High, Medium, and Low with a single actionable recommendation per item. Matching treats the characters * and ? as wildcards and compares patterns to a sample host in a case insensitive way. Multiple tokens are evaluated as alternatives.

Comparisons and warnings are derived from the text you load. Include and Match sections are kept as lines when you choose to preserve them and they are not interpreted during analysis. This keeps the view predictable and easy to trace back to the file you will save.

Processing pipeline

  1. Normalize newlines and split the file into lines.
  2. Collect leading comments, Include, and Match lines as non host lines.
  3. Detect each Host block and parse directive pairs.
  4. Optionally normalize key names, sort keys, and de‑duplicate repeats.
  5. Compute directive coverage and table rows for hosts and groups.
  6. Run lint rules for missing values, duplicates, and empty patterns.
  7. Evaluate security findings and assign High, Medium, or Low.
  8. Render a color coded preview, JSON, tables, and an optional diff.
Worked example
# Example snippet
Host db-*
    HostName db.internal
    User root
    ForwardAgent yes
    StrictHostKeyChecking accept-new
    LocalForward 0.0.0.0:5432 127.0.0.1:5432

Detected findings:

  • High — User is set to root; switch to a non root account.
  • Medium — StrictHostKeyChecking is accept new; use yes after you verify the key.
  • Medium — ForwardAgent is yes; limit it to trusted targets.
  • Medium — LocalForward binds all interfaces; bind to 127.0.0.1.

Severity interpretation

Severity levels and action cues
Severity Typical triggers Implication Action cue
High User root; StrictHostKeyChecking off; PasswordAuthentication yes Elevated takeover or spoofing risk Change immediately and re test access
Medium StrictHostKeyChecking accept new; ForwardAgent yes; wide binds in tunnels Exposure or trust gaps under common setups Tighten settings and confirm behaviour
Low ControlMaster without ControlPersist; HostName missing; UpdateHostKeys no Suboptimal defaults or clarity issues Set explicit values to improve safety

Validation and bounds from the code

Validation rules and messages
Field Type Min Max Step/Pattern Error text
Host pattern String 1 * Host pattern is empty.
Directive key String 1 Known or Custom Duplicate key "Name" or missing key.
Directive value String 1 Trims inline comments in quotes Key "Name" has an empty value.
Host block List 0 Host has no directives.

I/O formats and encoding

Inputs and outputs
Input Accepted families Output Encoding/precision Rounding
Text file or pasted text Plain text, comments preserved Config preview and file UTF‑8 text Not applicable
JSON snapshot Keys, values, options Not applicable
Tables (CSV) and reports (DOCX) Host list, lint, security, insights Not applicable
Baseline text Plain text Unified style diff Context, add and remove markers Not applicable

Networking and storage

  • Processing runs in the browser. Files are generated locally for copy and download.
  • No requests are sent to a server during parsing, preview, or export.

Performance notes

  • The diff uses a longest common subsequence method until the product of line counts exceeds 1 200 000 and then uses a linear fallback for speed.

Security considerations

  • Preview escapes HTML to avoid script injection inside the page.
  • Heuristics surface risky settings but do not verify host identity or key material.

Assumptions and limitations

  • Heads‑up Include and Match lines are preserved as text and not evaluated.
  • Heads‑up Wildcard matching supports * and ? only.
  • Grouping by domain uses the first token and its first dot for the suffix.
  • Sorting and normalization affect output order and key case compared with the source.
  • De‑duplication keeps the last occurrence of a repeated key within a host.
  • Directive values are treated as strings; ranges and formats are not validated.
  • The diff ignores differences in line ending style and collapses extra blank lines.
  • Security findings do not account for settings loaded through external files.

Edge cases and error sources

  • Non ASCII bytes in comments may render as replacement glyphs in some fonts.
  • Quoted values may include #; unquoted values stop at # for comments.
  • Windows style line endings are normalized on import.
  • Duplicate keys in mixed case are treated as the same when normalized.
  • Very large files may reduce diff quality when the fallback is used.
  • Multiple patterns on one Host line are treated as alternatives.
  • Spaces inside patterns are significant and split patterns into tokens.
  • Empty lines are removed from output beyond single separators.
  • Unrecognized directives are allowed as Custom and linted only for emptiness.
  • Whitespace differences inside values are preserved as entered.

Privacy and compliance: Processing is client only and no configuration content is transmitted or stored by a server.

Step‑by‑Step Guide

Secure Shell configuration review and cleanup with host patterns, directive coverage, and a simple risk check.

  1. Paste your file or drop it into the preview Import.
  2. Toggle sorting, normalization, and de‑duplication as needed Options.
  3. Scan the summary and the Hosts table for missing values and wildcards.
  4. Open the Security tab and apply the suggested changes where appropriate.
  5. Use the match tester to see which patterns catch a sample name.
  6. Compare against a baseline in Diff, then copy or download the updated file.
Example: After switching StrictHostKeyChecking to yes and binding tunnels to 127.0.0.1, the Security tab shows no alerts and the diff lists two changed lines.
  • Tip: Drag hosts to reorder when grouping is off and no search is active.
  • Tip: Keep non host lines when you want Include or Match kept at the top.

FAQ

Is my data stored?

No. Parsing, preview, and exports run in the browser and generated files stay on your device.

Avoid pasting secrets during review.
How accurate are the alerts?

They flag common risks based on directive values. They are not a security audit of hosts or keys and should be used with judgment.

Which formats can I load?

Plain text Secure Shell config files with Host blocks. Comments are preserved. Include and Match lines are kept when you choose to preserve them.

Can I work without a network?

Yes. Once the page is open, the tool continues to work because it does not request remote services for parsing or export.

How do I check a pattern?

Enter a sample name in the match tester. The counter shows how many Host patterns would match, using * and ? wildcards.

What does “Medium” mean?

A setting that is safe in some contexts but risky in others. Review the recommendation and tighten it when exposure is likely.

Does it cost anything?

There is no account step and no server processing. Use it as a quick aide during reviews and keep license terms for your environment in mind.

Glossary

Secure Shell
A protocol for secure remote logins and commands.
Host block
A section that starts with Host and contains directives.
Directive
A key and value pair that sets a connection option.
Wildcard
* matches many characters and ? matches one.
IdentityFile
Path to a private key used for authentication.
ForwardAgent
Allows the local agent to be used on the remote host.
StrictHostKeyChecking
Controls how unknown or changed host keys are handled.
ControlMaster
Shares a single connection across sessions.
ControlPersist
Keeps a shared connection alive for a period of time.
ProxyJump
Connects through a jump host before reaching the target.
Diff
A line by line view of changes against a baseline file.
Domain grouping
Lists hosts by the suffix after the first dot.