Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10 KiB
10 KiB
Changelog
v0.0.24
- Fix the
interface_nameresolver strategy: it sent filter names that NetBox ignores and therefore returned the host's first IP address instead of the named interface's. It now uses NetBox'sinterfaceandvminterfacefilters; a missing interface falls through to the next strategy. - Fix
netssh sftpandnetssh scpwith instance-qualified hosts (prod/web01:/path), which were taken for local paths. - Fix shell aliases of instance-qualified hosts ignoring anchored rewrite rules (
fsn_fsn1-pve1instead offsn_fsnpve1). - Add
netssh multito open several hosts side by side in tmux or zellij: host lists,tag:, NetBox virtualization clusters (cluster:, devices by default,--kind vm|all), and groups from the config (@name).--syncsends typing to all panes;netssh synctoggles it later. In the TUI,Spacemarks hosts andEnteropens them together. Configurable innetssh configure(multiplexer, panes per window, groups). - tmux keys for broadcast in
netssh multiwindows: prefixStoggles all panes, prefixeexcludes the current pane (border[SOLO]) or includes it again; alsonetssh sync --pane. Both keys are unbound in a default tmux, are not bound if your tmux.conf uses them, act only in netssh windows, and can be changed or turned off (multi.sync_key,multi.solo_key). netssh multiwidens the status bar of its own tmux session, which tmux otherwise cuts to[netssh-pv.- Cache entries remember the NetBox cluster of a host, for
cluster:completion and offline use. - Add
testenv/, a local Docker environment with two NetBox instances, SSH targets, a jump host, tmux, zellij, and bash/zsh/fish, and 185 end-to-end checks of all features, includingnetssh multiwith real tmux and zellij and screenshot checks of what a real terminal (xterm) renders (testenv/up.sh,testenv/test.sh). Not part of CI/CD.
v0.0.23
netssh configurenow covers every setting: after the instances, a menu opens with SSH defaults, SSH options (jump host, host key checking, connection target, address family, extra arguments,-ooptions), SSH rules (add, edit, remove by tag, instance, kind, name pattern), resolver & cache (including the cache file), shortcuts & command alias, and completion (max_results). SSH options can also be set per NetBox instance from the instance list.- Fix
netssh configuredropping global SSH options,ssh.rules, andcompletion.max_resultsfrom the config file when saving. - The configurator validates SSH options and rules before writing the config.
- Add
shortcuts.rewrites: regex rules that shorten hostnames, e.g.^([a-z]+)[0-9]+-→$1turnsfsn1-bx1.hoster.deintofsnbx1. Shortcuts work for connecting, shell aliases, and Tab completion (offered when the full name does not match), and can be edited innetssh configure. - Add
netssh alias --test HOSTNAMEto show the shortcut of a name and the cached hosts it matches. - Add
netssh sftpandnetssh scp: host lookup, shortcuts, instances, default user and port, SSH options and rules, jump host,--dry-run, and completion work as for ssh. IPv6 addresses are bracketed for host:path. - Add named port forwards (
ssh.forwardsglobally, per instance, and per rule),netssh tunnel HOST NAME|SPEC...(ssh -N with ExitOnForwardFailure), andnetssh --forward NAME. Forwards are editable innetssh configureand completed in the shell. - TUI:
Ctrl+Oopens SFTP,Ctrl+Tstarts a tunnel with configured or ad hoc forwards. - Add the
hostnameresolver strategy: connect by the NetBox name (plus optionalresolver.hostname_domain) instead of an IP, always or as a fallback afterprimary_ip. - Add static hosts (
hosts:) for machines that are not in NetBox, with user, port, tags, and SSH options, managed withnetssh hosts list|add|removeand innetssh configure. They are found before NetBox, work offline and without any NetBox, and support shortcuts, rules (kind: static), completion, aliases, sftp, scp, tunnels, and the TUI. - Fix options added by netssh landing after
--(netssh --no-jump -- host), where ssh read them as the destination.
v0.0.22
- Fix shell completion with multiple NetBox instances: typing a hostname without an instance prefix (
fsn1-bx1<Tab>) found nothing in bash and zsh, because onlyprod/…was offered. Hostnames that are unique across all instances are now offered without the prefix; connecting to them still checks every instance for ambiguous names. - zsh also accepts instance-qualified matches for the typed hostname, so names that exist in several instances are offered as
prod/…andstg/….
v0.0.21
- Ship a zsh completion script built for large caches: 5000 hosts complete in under 0.1 s instead of hanging for seconds with Cobra's generated script.
- Add
completion.max_resultsto limit the number of hostnames offered per completion. - Register zsh completion in the managed
.zshrcblock (fpathandcompdef), also whencompinitalready ran, e.g. with oh-my-zsh. The installer reports which completions it set up. - Add
netssh uninstall [--keep-config] [--dry-run] [--yes]to remove the binary, profile entries of all versions, completions, cache, and config (with a private backup). - Write marked
# >>> netssh >>>blocks fromnetssh hook installand the wizard, replacing unmarked entries of older versions instead of appending. - Add jump host support:
ssh.proxy_jumpglobally, per NetBox instance, and per rule, plus--jump HOSTand--no-jump. - Add
ssh.host_key_checking(strict,accept-new,off) for netssh connections only. - Add
ssh.target: name|hostnameso~/.ssh/confighost patterns apply and known_hosts entries belong to the device, andssh.address_family. - Add
ssh.optionsandssh.extra_args, andssh.rulesthat match by tag, instance, kind, or name pattern. - Add
netssh --version/netssh versionandnetssh --dry-runto print the final ssh command.
v0.0.20
- Configure multiple named NetBox instances and search them together in parallel.
- Add, edit, and remove instances in the interactive setup wizard while retaining legacy single-instance configuration support.
- Display instance-qualified hostnames and support
instance/hostnamefor SSH, completion, aliases, and notes. - Keep credentials, IP resolution, comments, cache entries, and local notes tied to the correct instance.
- Preserve partial interactive search results with an outage warning; reject incomplete full refreshes and ambiguous direct connections.
- Add
cache refresh --instance NAMEand isolate caches when configured endpoints change. - Add regression tests covering duplicate names and IDs across instances, outages, SSH routing, notes, aliases, and configuration round trips.
v0.0.19
- Update Ultraviolet to commit
a45b7c8.
v0.0.18
- Require Go 1.27.3 and migrate Bubbles, Bubble Tea, Huh, and Lip Gloss to their v2 modules under
charm.land. - Update TUI rendering and keyboard events for Bubble Tea v2 while preserving alternate-screen behavior.
- Route paste events to the focused editor, size input fields explicitly, and keep host lists within the terminal height.
- Reject ambiguous cached shortcuts and skip duplicate hostnames during cache refresh.
- Use paginated, unambiguous host lookups for SSH connections.
- Accept shortcut domains with or without a leading dot during cold lookups.
- Parse combined SSH options and preserve explicit users and ports supplied through
-o. - Merge cache changes under a file lock to preserve updates from concurrent processes.
- Honor configured resolver strategies during refresh and remove entries that no longer resolve safely.
- Check the host kind before reusing a cached IP for a TUI selection.
v0.0.17
- Update Go module dependencies to the latest versions within their existing module paths, including used transitive test dependencies.
- Remove obsolete indirect requirements and refresh module checksums with
go mod tidy.
v0.0.16
- Enable Bash, Zsh, and Fish completion for the configured command alias, such as
j. - Update or remove generated alias completion files when the command alias changes.
v0.0.15
- Use
https://git.zb-server.defor release download links and API requests instead of the runner's internal Gitea service URL.
v0.0.14
- Enable Renovate updates for indirect Go modules as well as direct dependencies and CI actions.
- Enable Go version updates and keep Go module metadata tidy after dependency updates.
- Correct direct and indirect dependency declarations in
go.mod. - Include
install.shas a downloadable release asset. - Include the installer in
checksums.txtalongside the platform binaries. - Link the installation command in release notes directly to the release's installer asset.
- Generate a change list from commits since the previous version tag for every release.
v0.0.13
- Translate the remaining German setup message and test example into English.
- Correct the connection editor comment to reference
Ctrl+E.
v0.0.12
- Support updating an existing installation by running the installer again.
- Remove the installer's Python dependency.
- Require valid SHA-256 checksums before replacing the binary.
- Check required programs before downloading and list missing dependencies.
- Check for
sudobefore downloading when the installation directory requires elevated permissions. - Consolidate legacy shell hooks and aliases in Bash, Zsh, and Fish profiles.
- Back up changed profiles and preserve symlinks and file permissions.
- Regenerate aliases and completions during installation and updates.
- Add a configurable command alias, such as
j, to the setup wizard. - Refresh or remove the generated command alias when its configuration changes.
v0.0.11
- Add multiline local server notes and optional NetBox comments in the TUI.
- Add CLI commands to show, replace, and append server notes.
- Keep local notes separate from the host cache, with private permissions and atomic writes.
- Use NetBox ETags for comment conflict protection when supported by the server.
- Correct authentication for NetBox v2 tokens.
- Fix environment variable overrides for configuration keys.
- Preserve usage history when refreshing cached hosts.
- Discard stale TUI search results and use
Ctrl+Efor connection editing. - Validate port overrides and preserve an explicit port 22.
- Resolve stale and live TUI selections through the configured resolver chain.
- Reject incomplete full cache refreshes and avoid marking filtered refreshes as full refreshes.
- Stop interpreting remote command flags as SSH options when applying defaults.