~/.ssh/config file and optionally keep them synchronized as a managed source.
Import Modes
One-Time Import
Import hosts from SSH config once, creating independent Netcatty hosts that are no longer connected to the source file. Use case: Migrating from command-line SSH to NetcattyManaged Source
Import and establish a two-way sync relationship where Netcatty writes changes back to the SSH config file. Use case: Continue using both Netcatty GUI and command-line SSH with the same host definitionsSupported SSH Config Features
Netcatty recognizes these SSH config directives:Host Directive
Hostβ Label (connection name)HostNameβ Hostname (actual IP/domain)Userβ UsernamePortβ Port (default: 22)
ProxyJump / Jump Hosts
ProxyJumpβhostChainwith resolved host IDs- Multiple jumps:
ProxyJump bastion1,bastion2creates a chain - Netcatty automatically creates inline hosts for unresolved jump references
Wildcard Patterns (Skipped)
Match Directive (Skipped)
Match directives are ignored during import as they involve conditional logic.
Import Process
One-Time Import
- Click Import in the Hosts panel
- Select SSH Config format
- Choose your SSH config file (usually
~/.ssh/config) - Ensure Managed Source is unchecked
- Click Import
- Review import results:
- Parsed - Total host entries found
- Imported - Successfully imported hosts
- Skipped - Wildcard patterns or invalid entries
- Duplicates - Merged with existing hosts
- Click Done
Managed Source Import
- Click Import in the Hosts panel
- Select SSH Config format
- Choose your SSH config file
- Check the Managed Source option
- Enter a Group Name (e.g., βSSH Config Hostsβ)
- Click Import
- Netcatty creates a managed group and tracks the source file
Managed Source Behavior
Two-Way Sync
When you import as a managed source: Reading (Import):- Netcatty reads host definitions from your SSH config
- Creates/updates hosts in the managed group
- Resolves ProxyJump chains to host IDs
- Changes to managed hosts are written back to SSH config
- Netcatty maintains a managed block:
- Content outside this block is preserved
- Duplicate host definitions are removed from the unmanaged section
Managed Block Format
Netcatty uses markers to identify its managed section:What Triggers Sync
Netcatty automatically updates the SSH config file when:- Host added to managed group
- Host modified (hostname, port, username, label)
- Host deleted from managed group
- Host moved into or out of managed group
- Jump host chain changed
- Jump host details changed (affects ProxyJump directive)
ProxyJump Serialization
Netcatty serializes host chains back to ProxyJump format: Example:Managing Sources
View Managed Sources
- Look for groups with the π icon (indicates managed source)
- Hover to see source file path
- Right-click the group for management options
Unmanage a Source
Option 1: Keep Hosts- Right-click the managed group
- Select Unmanage Source
- Hosts remain in Netcatty but are no longer written to SSH config
- The managed block in SSH config is cleared
- Right-click the managed group
- Select Delete Group
- Choose Delete group and all hosts
- Hosts are removed from Netcatty
- The managed block in SSH config is cleared
Re-import After Unmanaging
If you unmanage a source but the SSH config file still exists:- Import again as a managed source
- Netcatty will re-create the managed relationship
- Existing hosts are matched by hostname/port/username and updated
- New hosts are added
Import Warnings & Errors
Circular ProxyJump Reference
ssh_config: detected circular reference in ProxyJump for "server-a", skipping chain.
The host is imported but the ProxyJump is ignored to prevent infinite loops.
Unresolved Jump Host
ssh_config: created inline jump host(s) for "production": unknown-bastion
Netcatty creates a placeholder host for unknown-bastion with minimal configuration. You should update it with the correct hostname.
Invalid Hostname
ssh_config: skipped host "@invalid" (invalid hostname).
The entry is ignored due to invalid characters or format.
Duplicate Hosts
If your SSH config contains multiple entries with the same hostname/port/username:Best Practices
When to Use Managed Source
β Use managed source when:- You frequently use both GUI and command-line SSH
- You share SSH config with other tools (Ansible, rsync, etc.)
- You want a single source of truth for host definitions
- You edit SSH config manually and want changes reflected in Netcatty
- You only use Netcatty GUI
- Your SSH config uses complex Match directives
- You want Netcatty to have additional metadata (tags, custom groups) not in SSH config
- You use wildcard patterns extensively
Organizing Managed Groups
Recommended structure:Avoiding Conflicts
- Donβt manually edit the managed block - Netcatty overwrites it
- Keep non-managed hosts outside the markers - They are preserved
- Use unique host aliases - Avoid duplicate Host entries
- Test changes - Verify with
ssh -G hostnameafter sync
Implementation Details
Parsing Algorithm
Netcatty parses SSH config using a token-based parser:Serialization Format
Sync Mechanism
File Writing
When writing back to SSH config:- Read existing file content
- Locate managed block markers
- If no markers exist:
- Remove duplicate host entries that match managed hosts
- Append managed block at the end
- If markers exist:
- Replace content between markers
- Preserve everything outside
- Write atomically to prevent corruption
Comparison with Other Tools
| Feature | Netcatty | Termius | iTerm2 | PuTTY |
|---|---|---|---|---|
| Import SSH config | β | β | β | β |
| Two-way sync | β | β | β | β |
| ProxyJump support | β | β | β | β |
| Managed blocks | β | β | β | β |
| Preserve user config | β | β | β | N/A |
Troubleshooting
Changes Not Syncing to File
- Check file permissions:
ls -l ~/.ssh/config - Verify managed source is still active (group has π icon)
- Check Netcatty logs for write errors
- Ensure the parent directory exists and is writable
SSH Canβt Find Hosts
- Verify managed block syntax:
ssh -G hostname - Check SSH config path:
ssh -F ~/.ssh/config -G hostname - Ensure no syntax errors:
ssh -T git@github.com(test connection) - Check for duplicate Host entries
Managed Block Removed
If you accidentally delete the managed block markers:- Netcatty will detect missing markers on next sync
- It will append a new managed block at the end
- This may create duplicate entries - clean up manually
- Or unmanage and re-import to start fresh
ProxyJump Not Working
- Ensure jump hosts are defined before dependent hosts
- Verify jump hosts are accessible:
ssh bastion - Check SSH version:
ssh -V(ProxyJump requires OpenSSH 7.3+) - For older SSH, use
ProxyCommand ssh -W %h:%p bastioninstead
Security Considerations
- File permissions: SSH config should be
0600(readable/writable by user only) - Netcatty respects permissions: Wonβt write if file is read-only
- No password export: Netcatty never writes passwords to SSH config
- Key references: SSH keys are stored separately in Netcatty, not in SSH config
- Hostname exposure: SSH config is plaintext, so hostnames/IPs are visible to anyone with file access
Advanced Usage
Multiple SSH Config Files
You can manage multiple SSH config files as separate sources:Conditional Includes
SSH config supports conditional includes:Custom SSH Options
For SSH directives not supported by Netcatty (e.g.,StrictHostKeyChecking, ForwardAgent):
- Keep them outside the managed block
- Use wildcard patterns in the non-managed section:
- Netcatty preserves these global settings
