All notable changes to claude-code-ssh will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
3.2.2 - 2026-04-14
- Host key verifier now SHA256-hashes the presented key and compares against known_hosts entries with padding normalization. Previously, known hosts were accepted without fingerprint comparison (MITM vulnerability). Unknown hosts still default to TOFU;
SSH_STRICT_HOSTS=1rejects unknown hosts. cwdargument in the legacyexecCommandpath is now shell-quoted, closing a shell-injection vector.- SFTP channels are now closed in a
finallyblock — prior leak could exhaust the SFTP subsystem after repeated uploads/downloads. - Bad-regex crash in tail filtering is now caught and surfaced as a user-facing error instead of crashing the server.
SSHManager.execpassthrough —ssh_execute,ssh_health_check,ssh_db_*,ssh_deploy,ssh_journalctl,ssh_systemctl,ssh_tail,ssh_catwere failing at runtime with "client.exec is not a function" despite unit tests passing against a mock.SSHManager.sftp+ dual-modeforwardOutpassthroughs — fixesssh_upload,ssh_download,ssh_deploy,ssh_tunnel_create, and proxy-jump chains.SSHManager.shellpassthrough —ssh_session_startwas crashing with "client.shell is not a function".- 13 tool schemas aligned with handler parameters:
ssh_cat,ssh_port_test,ssh_diff,ssh_edit,ssh_tail,ssh_monitor,ssh_health_check,ssh_service_status,ssh_journalctl,ssh_docker,ssh_tail_start,ssh_tail_read,ssh_session_memory. Ghost fields removed, snake_case normalized. ssh_systemctlschema pruned:is-active/is-enabledremoved (handler rejected them);list-unit-files,pattern,use_sudoadded.- Tool registry corrected — now reports the full 51 tools across 7 groups (previously listed 37 across 6). Enables per-group disable for the
gamechangertools.
- CI workflow bumped to
actions/checkout@v5andactions/setup-node@v5(silences Node 20 deprecation warnings). - ESLint
max-warningsraised to 150; 660 formatting issues auto-fixed in one pass. - Internal: SFTP cache handle renamed
_sftpHandleto avoid shadowing the newsftp()method.
3.2.1 - 2026-04-13
- 14 "gamechanger" tools:
cat,diff,edit,docker,journalctl,port-test,systemctl,tail-3,session-v2,deploy-artifact,plan - Modular handler architecture — each tool group in its own file under
src/tools/ - Streaming command execution with backpressure (
src/stream-exec.js) - ASCII-only output — plain markdown tables with head+tail truncation,
[info]/[warn]/[err]tagged logs - Startup banner with profile, servers, tool count, and pool status
- Logger uses 6-char fixed-width level tags for column alignment
- Tool registration gated by per-user enablement (
~/.ssh-manager/tools-config.json)
- Sudo passwords pipe via stdin (never argv)
- DB passwords via env var (
MYSQL_PWD,PGPASSWORD, connection URI) - Token-level SQL parser rejects anything but read-only SELECT