bssh 2.4.2

Parallel SSH command execution tool for cluster management
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
bssh (2.4.2-1~jammy1) jammy; urgency=medium

  * v2.4.2
  ### Fixed
  - Sign the macOS release binaries with a Developer ID Application
    certificate and notarize them, replacing the revoked Apple
    Distribution certificate that made macOS kill and delete
    installed binaries on launch (#264).
  ### CI/CD
  - Reject a signing certificate that is not a Developer ID
    Application identity before signing, assert the resulting
    authority and hardened runtime flag, and gate the release on
    notarization reaching Accepted (#264).
  ### Technical Details
  - No source changed between 2.4.1 and 2.4.2. This package is
    functionally identical to 2.4.1; the release exists to republish
    the macOS binaries.

 -- Jeongkyu Shin <inureyes@gmail.com>  Fri, 14 Aug 2026 18:04:51 +0800

bssh (2.4.1-1~jammy1) jammy; urgency=medium

  * v2.4.1
  ### Security
  - Keep a process-lifetime host key pin in accept-new mode when no
    known_hosts path can be determined, instead of disabling
    verification entirely (#242).
  - Fail closed when the known_hosts path exists but is not a readable
    regular file, instead of treating it as absent (#242).
  - Serialize accept-new first-use recording across bssh processes
    with a sibling advisory lock file (#242).
  - Allow BSSH_CERT_AUTHORITY_POLICY=reject to fail closed on matching
    known_hosts @cert-authority lines (#242).
  ### Fixed
  - Send forwarding target hostnames to the server instead of
    resolving them locally, so names that only resolve from the server
    work again; forced -4/-6 still resolves locally (#257).
  - Honor the address family preference in SOCKS4 dynamic forwarding,
    which previously ignored -4/-6 and AddressFamily (#255).
  - Parse SOCKS5 IPv6 destination literals (ATYP 0x04) instead of
    replying address type not supported (#256).
  - Record the first address rather than a comma-joined list as the
    hostname for a socket address slice (#243).
  - Remove the leading blank line from a known_hosts file created by
    the first recording (#243).
  ### Performance
  - Skip the known_hosts write locks when the offered key already
    matches a recorded entry (#243).
  ### Tests
  - Fix the nondeterministic test_expand_path_with_tilde failure by
    locking HOME across mutating and reading tests (#243).
  ### Changed
  - Lib API additions only, no source break from 2.4.0:
    ServerCheckMethod gained two variants on non_exhaustive enums and
    ToSocketAddrsWithHostname gained a defaulted host_port method.
  ### Dependencies
  - Refresh the locked dependency graph; no Cargo.toml requirement
    changed and no crate entered or left.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 03 Aug 2026 22:15:22 +0900

bssh (2.4.0-1~jammy1) jammy; urgency=medium

  * v2.4.0
  ### Security
  - Implement real TOFU verification for the default accept-new host
    key mode, which previously accepted any server key without
    checking or recording it (#239).
  - Accept a host key matching any recorded known_hosts entry instead
    of rejecting on the first differing same-algorithm line (#239).
  - Reject hostnames that cannot round-trip through a known_hosts
    entry rather than recording them verbatim (#239).
  - Honor known_hosts @revoked and @cert-authority markers, match
    hostnames case-insensitively, and create ~/.ssh and known_hosts
    with restrictive permissions from the start (#239).
  ### Changed
  - Breaking, lib API: address family selection and per-target
    ssh_config resolution changed several public function signatures
    (#246, #249).
  ### Fixed
  - Make bssh ping report a 0/1/255 exit code instead of always
    exiting 0 (#245).
  - Wire up the -4/-6 flags and the ssh_config AddressFamily keyword,
    which were parsed and then discarded (#246).
  - Apply the address family preference to port forwarding, changing
    the default -L/-D listen address under -6 (#246).
  - Apply the address family preference to jump hops past the first,
    which could silently tunnel over the wrong family (#248).
  - Resolve ssh_config settings against the actual target host rather
    than once per dispatch, so per-host Host blocks apply (#249).
  - Accept bracketed IPv6 address literals in host specifications,
    which were unusable in every form (#251).
  - Show the full error context chain when an interactive connection
    fails, and fix related error-message defects (#238).
  ### Documentation
  - Remove release history and migration guidance from the man page.
  ### Dependencies
  - Refresh the locked dependency graph; no Cargo.toml requirement
    changed.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 03 Aug 2026 17:42:46 +0900

bssh (2.3.1-1~jammy1) jammy; urgency=medium

  * v2.3.1
  ### Added
  - Preserve Kitty keyboard state owned by an outer TUI across
    interactive PTY sessions (#236).
  ### Fixed
  - Restore ordinary keyboard input after remote PTY applications leak
    Kitty keyboard or xterm modifyOtherKeys modes (#234).
  - Prevent Homebrew tap updates from corrupting formula stanzas or
    publishing checksums from failed downloads (#233).
  ### Changed
  - Raise the workspace MSRV and Debian/Launchpad toolchain to Rust 1.96;
    use the rustc-release PPA for jammy, noble, and resolute (#231, #232).
  ### Documentation
  - Remove stale bssh-russh attribution and keep README release history
    bounded (#230).
  - Fix the file-transfer filter example so it compiles as a doctest.

 -- Jeongkyu Shin <inureyes@gmail.com>  Wed, 29 Jul 2026 17:24:18 +0900

bssh (2.3.0-1~jammy1) jammy; urgency=medium

  * v2.3.0
  ### Performance
  - Roughly double single-connection SFTP write throughput on
    bssh-server by raising SSH channel sizing, pipelining server-side
    writes with sequential coalescing and seek elision, and tuning the
    release profile (#187, #224).
  ### Added
  - Make server-side SSH compression configurable via
    server.compression (default off) instead of hard-disabled (#220),
    and wire the ssh_config Compression directive into the client
    (#219).
  ### Fixed
  - Fix an SFTP session deadlock that froze every download to a
    paramiko client at its initial 2 MiB channel window, and set
    TCP_NODELAY on accepted sockets to remove a delayed-ACK stall on
    sequential round trips (#227).
  - Make sftp.root/scp.root chroot usable by re-anchoring client paths
    under the root; cd/get/open/stat previously failed (#214).
  - Advertise only none SSH compression so clients negotiating
    zlib@openssh.com no longer drop mid-session (#215).
  ### Security
  - Confine absolute SFTP symlink targets to the chroot so a chrooted
    client cannot link to the host filesystem (#214).
  ### Changed
  - Drop the vendored bssh-russh fork and build against upstream russh
    0.62.1 now that both fork patches are upstream (#212). Raise the
    workspace minimum supported Rust to 1.93 and add a CI MSRV guard;
    the Debian and Launchpad PPA toolchains move to rustc-1.93.
  ### Documentation
  - Add an Apache-2.0 NOTICE file (#210), document that native Windows
    client execution is not supported with WSL2 as the path today
    (#221), and add an SFTP benchmark/interop harness under tools/bench
    (#228).

 -- Jeongkyu Shin <inureyes@gmail.com>  Sat, 18 Jul 2026 12:00:00 +0900

bssh (2.2.3-1~jammy1) jammy; urgency=medium

  * v2.2.3
  ### Dependencies
  - Sync both internal russh forks to upstream stable (#207). Advance
    bssh-russh to russh 0.61.1 and bssh-russh-sftp to russh-sftp 2.3.0,
    bringing the current RustCrypto generation (sha2/sha1 0.11, hmac
    0.13, aes 0.9, digest 0.11, pbkdf2 0.13) and unifying ssh-key on a
    single 0.7.0-rc.10. Re-port the high-frequency PTY Handle::data
    drain fix onto the new server session loop, add a regression test,
    and retire three patches now merged upstream.
  ### Security
  - Patch RUSTSEC-2026-0009 (#208), a stack-exhaustion denial of
    service in time 0.3.45 pulled transitively via ratatui. Bump time
    to 0.3.47 and raise the minimum supported Rust to 1.88, which time
    0.3.47 requires; cargo audit now reports zero vulnerabilities.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 25 May 2026 12:00:00 +0900

bssh (2.2.2-1~jammy1) jammy; urgency=medium

  * v2.2.2
  ### Bug Fixes
  - Keep idle SSH sessions alive (#206). Lower the default keepalive
    interval (--server-alive-interval) from 60s to 30s so bssh sends
    keepalive traffic before common one-minute idle reapers (load
    balancers, NAT gateways, sshd ClientAliveInterval) close otherwise
    healthy sessions. Normalize --server-alive-interval 0 to fully
    disabled keepalive instead of a zero-duration russh timer, in both
    the russh client config and the TCP SO_KEEPALIVE path. Leave the
    client inactivity_timeout disabled so a healthy interactive session
    that produces no inbound data for a long time (tmux, idle shell,
    REPL) is never torn down locally by bssh. Dead-peer detection now
    resolves in about 120s instead of 180s.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 25 May 2026 00:00:00 +0900

bssh (2.2.1-1~jammy1) jammy; urgency=medium

  * v2.2.1
  ### Security
  - Forward-port the SSH-agent half of CVE-2026-46673 (compression
    ZIP-bomb DoS) into the bssh-russh fork (#203). Upstream russh v0.60.3
    has the fix but our fork was based on v0.60.1. Adds
    MAX_AGENT_FRAME_LEN = 256 KiB and a read_frame() helper in
    src/keys/agent/{client,server}.rs that rejects oversized peer frame
    lengths with Error::AgentProtocolError before allocating. The
    matching russh-cryptovec 0.59.0 to 0.60.3 bump carries the cryptovec
    hardening half of the same CVE. cargo audit reports 0
    vulnerabilities / 0 warnings post-bump.

  ### Dependencies
  - Bump workspace deps and sync russh forks to upstream stable (#203).
    lru 0.17 to 0.18, signal-hook 0.3 to 0.4, opentelemetry family 0.31
    to 0.32, nix 0.31.3. bssh-russh 0.60.1 to 0.60.3 (picks up
    aws-lc-rs 1.17.0 and the upstream v0.60.2 fixes our PR #193 already
    forward-ported). bssh-russh-sftp 2.1.1 to 2.1.2 full source sync:
    upstream absorbed the original serde_bytes perf patch (now moved to
    patches/historical/); the fork's remaining value-add (two pipelined
    File I/O helpers) is re-ported on top of the new Features API.
    Cargo.toml swaps flurry for dashmap 6.1.0 and adds serde_bytes as a
    direct dep.

  ### Bug Fixes
  - Add the missing [dev-dependencies] block to the bssh-russh fork so
    its 75 inline tests compile for the first time since the initial
    sync at commit 508aa3f0 (#204). Imports were copied from upstream
    russh, dev-deps were not. Adds env_logger 0.11, tempfile 3, and
    tokio with process/macros features. Workspace test aggregate climbs
    from 1796 to 1871 passed / 0 failed / 10 ignored.
  - Drop a redundant .into_iter() in the synced SFTP session loop to
    satisfy rustc 1.95's stricter clippy::useless_conversion lint
    (#205). The line was imported verbatim from upstream russh-sftp
    2.1.2 in PR #203 and broke CI after the toolchain bump.

 -- Jeongkyu Shin <inureyes@gmail.com>  Tue, 19 May 2026 00:30:00 +0900

bssh (2.2.0-1~jammy1) jammy; urgency=medium

  * v2.2.0
  ### New Features
  - Add `BSSH_PASSWORD` environment variable for non-interactive password
    auth (#201). Discouraged for production; documented in the man page
    and README environment-variables section.

  ### Improvements
  - Collect `--password` once up-front in the dispatcher and share the
    secret across all parallel SSH tasks via `Arc<Password>` (#201,
    closes #200). Each per-node auth task previously prompted via
    `rpassword::prompt_password()`, racing for stdin and interleaving
    with the indicatif progress UI. The new flow mirrors the existing
    `Arc<SudoPassword>` pattern: prompt once before any executor or
    `MultiProgress` is initialized, then thread a shared `Arc<Password>`
    through `ParallelExecutor`, `ExecutionConfig`, `ConnectionConfig`,
    `FileTransferParams`, the SFTP `*_with_jump_hosts` helpers, the
    jump-host `determine_auth_method` path, and the legacy
    `execute_command_with_forwarding` path.
  - Warn on stderr when `-S` / `--sudo-password` is passed to subcommands
    where it has no effect (`ping`, `upload`, `download`, `list`,
    `cache-stats`, and interactive shells) (#201, follow-up #200). The
    warning routes to stderr via `eprintln!` so `bssh ... ping | grep ...`
    pipelines stay clean. `exec` and the SSH-mode interactive path
    continue to honor `-S` as before.

  ### Bug Fixes
  - Fix `--password` race across parallel SSH connections (#200, #201).
    Multiple per-node tasks previously raced for stdin: the prompt could
    be missed, repeated per node, or interleaved with the progress UI.
  - Fix `-S` being silently dropped by `ping`, `upload`, and `download`
    (#201, closes #200). The dispatcher only read `cli.sudo_password`
    in the `exec` and interactive branches, so users could pass `-S` to
    other subcommands without any feedback that the flag had no effect.

  ### Dependencies
  - Drop five stale or redundant direct dependencies (#199): `arrayvec`
    (unused), `ctrlc` (replaced by `tokio::signal::ctrl_c`), `directories`
    (replaced by `dirs`, already used in 16 other sites), `signal-hook`
    0.4.4 (downgraded to 0.3 to share the crate `crossterm` already
    pulls in via `signal-hook-mio`), plus the macOS `objc2`/`block2`/
    `dispatch2` chain that `ctrlc` brought in. Three more crates
    (`lazy_static`, `once_cell`, `fastrand`) are no longer directly
    referenced after migrating to `std::sync::LazyLock`/`OnceLock` and
    `rand::random_range`.
  - Replace the unmaintained `atty` crate with `std::io::IsTerminal`
    (stdlib since Rust 1.70) across PTY, logging, ssh::auth, and the
    interactive connection (#198). Drops RUSTSEC-2024-0375 (unmaintained)
    and RUSTSEC-2021-0145 (unsound unaligned read) at once.
  - Pick up 33 transitive patch bumps from `cargo update` within current
    semver constraints (#198): tokio 1.52.1 to 1.52.3, rustls 0.23.39
    to 0.23.40, h2 0.4.13 to 0.4.14, digest 0.11.2 to 0.11.3, rpassword
    7.4.0 to 7.5.2, and others.

  ### Known Issues
  - RUSTSEC-2023-0071 (RSA Marvin Attack) acknowledged via
    `.cargo/audit.toml` ignore with an explanatory comment (#198). Both
    `rsa` 0.9.10 (via `ssh-key` 0.6.x) and `rsa` 0.10.0-rc.17 (via the
    vendored `bssh-russh` fork) are affected, and no fixed upstream
    `rsa` release exists. Bumping to 0.10.0-rc.18 conflicts with the
    `bssh-russh` `pkcs5 = "=0.8.0-rc.13"` pin. Users handling
    untrusted hosts should prefer Ed25519 or ECDSA keys instead of RSA.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 18 May 2026 00:00:00 +0900

bssh (2.1.4-1~jammy1) jammy; urgency=medium

  * v2.1.4
  ### Improvements
  - Stream SFTP uploads/downloads in 255 KiB chunks instead of buffering
    the whole file in memory (#195). On a 1 GiB transfer over loopback,
    upload peak RSS drops from ~3.23 GB to ~20 MB and wall time from
    38.6 s to 3.5 s; download peak RSS drops from ~2.17 GB to ~16 MB.
    Multi-GB transfers no longer OOM the client.
  - Pipeline up to 64 concurrent SFTP requests for upload and download
    (#196). The server-advertised read/write lengths are also capped
    against local maxima to avoid oversized allocations from untrusted
    SFTP metadata, the download reorder queue is bounded across both
    in-flight and pending out-of-order responses, and `fstat` size info
    is used where available to avoid reads past EOF.
  - Raise the bssh-server SFTP `MAX_READ_SIZE` from 64 KiB to the
    255 KiB SFTP standard (#197). Combined with client-side pipelining,
    this cuts the per-MiB request count on downloads from 16 to 4.

 -- Jeongkyu Shin <inureyes@gmail.com>  Sun, 10 May 2026 00:00:00 +0900

bssh (2.1.3-1~jammy1) jammy; urgency=medium

  * v2.1.3
  ### Bug Fixes
  - Fix SCP/SFTP path doubling on absolute client paths (#186): `ScpHandler`
    and `SftpHandler` no longer re-root every absolute client path under the
    user's home directory. With no chroot configured, absolute paths are
    honored verbatim and relative paths resolve from the user's home
    directory, matching OpenSSH `sftp-server`/`scp` defaults.
  - Fix SCP single-file destinations from appending source filename (#186):
    `scp local.bin host:/tmp/dest.bin` now writes to `/tmp/dest.bin`
    instead of `/tmp/dest.bin/local.bin`, by consulting `target_is_directory`
    and the filesystem state of the resolved target.
  - Make `sftp.root` configuration actually effective (#186): previously
    dead code, the YAML setting now controls the SFTP chroot. Same plumbing
    added for new `scp.root` field.
  - Block chroot bypass via intermediate-directory symlinks: the resolver
    now canonicalizes the closest existing ancestor of the target path and
    verifies it stays inside the canonicalized chroot.

  ### New Features
  - Add `scp.root` configuration field for separate SCP chroot setting,
    falling back to `sftp.root` when unset.

  ### Improvements
  - Vendor `russh-sftp` as `bssh-russh-sftp` with a `serde_bytes` performance
    fix for `SSH_FXP_WRITE`/`SSH_FXP_DATA` packets (#188). Measured impact
    on a CPU-bound host: 1 GiB SFTP upload throughput improves from
    74.8 MiB/s to 96.4 MiB/s (+29%).
  - Forward-port unreleased upstream russh fixes (#193): exclude SHA-1 MACs
    from `Preferred::DEFAULT`/`COMPRESSED` (russh #690), fix channel write
    ordering when `pending_data` is non-empty (russh #693).
  - Upgrade dependencies: tokio 1.52.1, clap 4.6.1, tracing 0.1.44, lru 0.17,
    uuid 1.23.1, tokio-util 0.7.18, aws-lc-rs 1.16.3.

  ### Migration Notes
  - **Default file-transfer behavior is no longer chrooted to the user's
    home directory.** With `sftp.root`/`scp.root` unset (the default),
    absolute client paths are honored verbatim and relative paths resolve
    from the user's home directory. Deployments that intentionally want
    chroot-at-home-dir must now set `sftp.root: <home dir>` explicitly.

  ### Documentation
  - Standardize man page trailers (bssh.1, bssh-keygen.1, bssh-server.8)
    with consistent BUGS / AUTHORS / COPYRIGHT / SEE ALSO ordering and
    Apache-2.0 license notice.

  ### CI/CD Improvements
  - Bump GitHub Actions to Node.js 24-compatible versions:
    actions/checkout v4 -> v6, actions/cache v4 -> v5,
    actions/upload-artifact v4 -> v7, apple-actions/import-codesign-certs
    v3 -> v7.

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 30 Apr 2026 00:00:00 +0900

bssh (2.1.2-1~jammy1) jammy; urgency=medium

  * v2.1.2
  ### Bug Fixes
  - Restore terminal mouse tracking state on PTY session disconnect (#190):
    after a PTY session disconnects (normal exit, Ctrl+C, network drop, or
    panic), the local terminal no longer prints raw SGR mouse escape
    sequences. All cleanup paths now emit the full set of mouse-tracking-off
    sequences (modes 1000, 1002, 1003, 1006, 1015) plus cursor-show and
    alternate-screen-exit on teardown.
  - Make force_terminal_cleanup safe to call from the panic hook: switch to
    try_lock() so a poisoned mutex or self-held lock cannot deadlock or
    secondary-panic during teardown.

  ### CI/CD Improvements
  - Trigger Homebrew formula update only after the official release
    (workflow_call from publish-release), not on every Release workflow run.
  - Prevent double-trigger of the release workflow by removing the
    "published" event type — publish-release already handles the
    pre-release to official conversion.

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 27 Apr 2026 00:00:00 +0900

bssh (2.1.1-1~jammy1) jammy; urgency=high

  * v2.1.1
  ### Bug Fixes
  - Fixed bssh-server panic on every client connection: block_on() called inside
    tokio async runtime for auth rate limiter ban check (#185)
  - Fixed bssh-server rejecting authenticated clients: session not registered
    with SessionManager after successful key/password verification (#185)

  ### Improvements
  - Improved Launchpad PPA packaging for Rust 2024 edition
  - Added sanitize-vendor.py for vendored crate checksum sanitization

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 17 Apr 2026 00:00:00 +0900

bssh (2.1.0-1~jammy1) jammy; urgency=medium

  * v2.1.0
  ### New Features
  - EnvGuard RAII wrapper for safe environment variable handling in tests (#179, #181)

  ### Improvements
  - Migrated bssh and bundled bssh-russh crate to Rust 2024 edition
  - Applied 2024 edition clippy improvements: collapsed 38 nested if-let statements into guard-clause form in bssh-russh
  - Replaced 177 ad-hoc unsafe env::set_var/remove_var call sites across 17 test files with EnvGuard + #[serial]
  - Removed hand-rolled ENV_MUTEX pattern in integration tests in favor of #[serial]

  ### Bug Fixes
  - Fixed pattern matching for Rust 2024 edition: removed explicit ref / ref mut bindings in if-let patterns

  ### CI/CD Improvements
  None

  ### Technical Details
  - Added Test Environment-Variable Mutation Pattern section to ARCHITECTURE.md documenting EnvGuard soundness contract

  ### Dependencies
  - Pinned bytes to v1.11.1

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Tue, 14 Apr 2026 12:00:00 +0900

bssh (2.0.1-1~jammy1) jammy; urgency=medium

  * v2.0.1
  ### New Features
  None

  ### Improvements
  - Add bssh-keygen to Debian package build pipeline

  ### Bug Fixes
  - Fix GitHub Actions debian_build.yml distro configuration (questing -> resolute)

  ### CI/CD Improvements
  - Added bssh-keygen to Debian package matrix for all architectures
  - Fixed GitHub Actions workflow validation issue in debian_build.yml

  ### Technical Details
  - Created debian/control.bssh-keygen.binary and debian/rules.bssh-keygen.binary for bssh-keygen packaging

  ### Dependencies
  - Bumped bssh-russh from 0.60.0 to 0.60.1 with RustCrypto security updates
  - Updated RC dependency versions: rsa 0.10.0-rc.17, elliptic-curve 0.14.0-rc.30, p256/p384/p521 0.14.0-rc.8, ml-kem 0.3.0-rc.2
  - Upgraded spki from 0.8.0-rc.4 to 0.8.0 (stable)

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Sun, 13 Apr 2026 12:00:00 +0900

bssh (2.0.0-1~jammy1) jammy; urgency=medium

  * v2.0.0
  ### New Features
  - **bssh-server SSH Server**: A lightweight SSH server designed for container environments
    - Full SSH, SFTP, and SCP protocol support
    - PTY/shell session support with terminal handling
    - Password and public key authentication
    - YAML-based comprehensive configuration system
    - Command execution handler with security controls
  - **Audit Logging Infrastructure**: Comprehensive audit logging system
    - File-based audit exporter (JSON Lines format)
    - OpenTelemetry audit exporter for observability platforms
    - Logstash audit exporter for ELK stack integration
  - **Security Features**: Enhanced security controls
    - IP-based access control (allow/deny lists)
    - Authentication rate limiting (fail2ban-like protection)
    - Session management and connection limits
    - Path traversal prevention in SFTP handler
  - **File Transfer Filtering**: Control file transfers
    - Path-based and pattern-based filter rules
    - Configurable filter actions (allow/deny)
  - **bssh-keygen Tool**: SSH key pair generation utility
  - **Server Configuration Enhancements**
    - Per-jump-host SSH private key configuration
    - SSH config Host alias reference in jump_host configuration
    - SSH keepalive settings in interactive mode
  - **Separate Packaging**: bssh and bssh-server distributed as separate packages

  ### Improvements
  - Added comprehensive server configuration manual and manpages
  - Shared module structure for client/server code reuse
  - Help examples and man pages now correctly use -C (uppercase) for the cluster flag

  ### Bug Fixes
  - Fix inconsistent SSH idle disconnects: override russh's 10-minute inactivity_timeout when keepalive is enabled, enable TCP SO_KEEPALIVE on the socket via socket2, and wire user-configured server_alive_interval through the exec-mode code path (previously dropped at the ConnectionConfig boundary)
  - Use consistent source package name in bssh-server Debian control file
  - Use type inference for ioctl to support both glibc and musl builds in bssh-server

  ### CI/CD Improvements
  - Updated release workflow for dual-package distribution
  - Separate Debian packages for client and server
  - Separate Homebrew formulas for each component
  - Added Teams release notification
  - Updated non-LTS Ubuntu target from 25.04 plucky to 25.10 questing

  ### Technical Details
  - russh-based SSH server handler implementation
  - Modular audit exporter architecture with trait-based design
  - SshConnectionConfig::to_russh_config() now sets inactivity_timeout explicitly; to_tcp_keepalive() derives kernel TCP keepalive params
  - Client::connect_with_config rewritten around russh::client::connect_stream to apply SO_KEEPALIVE before handshake
  - Key-gen sites use rand::rng() directly now that rand 0.10 stable is reachable

  ### Dependencies
  - Synced bssh-russh fork with upstream warp-tech/russh v0.60.0, pulling in the RustCrypto migration
  - rand 0.8 -> 0.10 stable (via rand_core 0.10.0), signature 3.0.0-rc.10, ed25519-dalek 3.0.0-pre.6, elliptic-curve 0.14.0-rc.28, p256/p384/p521 0.14.0-rc.7, ecdsa 0.17.0-rc.16, curve25519-dalek 5.0.0-pre.6, der 0.8, sec1 0.8, pkcs8 0.11.0-rc.11, pkcs5 0.8.0-rc.13, spki 0.8.0-rc.4, ml-kem 0.3.0-rc.1, ssh-key 0.6.18
  - tokio 1.50.0 -> 1.51.1, socket2 0.6.1 -> 0.6.3, signal-hook 0.4.3 -> 0.4.4, fastrand 2.3.0 -> 2.4.1, async-compression 0.4.37 -> 0.4.41, bytes 1.11.0 -> 1.11.1

  ### Breaking Changes
  - Package split: bssh-server now requires separate installation

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 13 Apr 2026 12:00:00 +0900

bssh (1.7.0-1~jammy1) jammy; urgency=medium

  * v1.7.0
  ### New Features
  - **SSH Keepalive Support**: Added SSH keepalive to prevent idle connection timeouts (#122)
    - `--server-alive-interval` option: Configure keepalive interval in seconds (default: 60, 0 to disable)
    - `--server-alive-count-max` option: Maximum keepalive messages without response before disconnect (default: 3)
    - Configuration support in config.yaml via `server_alive_interval` and `server_alive_count_max` fields
    - Helps maintain long-running sessions through firewalls that drop idle connections

  ### Improvements
  - **Documentation**: Added GitHub downloads badge to README

  ### Bug Fixes
  None

  ### CI/CD Improvements
  None

  ### Technical Details
  - Implemented SSH keepalive packet sending at configurable intervals
  - Automatic connection termination after max retries without response
  - Full integration with all execution modes (exec, interactive, file transfer)

  ### Dependencies
  - Updated russh from 0.55.0 to 0.56.0
  - Updated ratatui from 0.29.0 to 0.30.0
  - Updated signal-hook from 0.3.18 to 0.4.1
  - Updated whoami from 1.6.1 to 2.0.1
  - Updated unicode-width from 0.2.0 to 0.2.2

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 09 Jan 2026 00:00:00 +0900

bssh (1.6.0-1~jammy1) jammy; urgency=medium

  * v1.6.0
  ### New Features
  - **Jump Host Configuration Support in YAML**: Added `jump_host` field support in config.yaml (issue #115)
    - Global defaults level: `defaults.jump_host` for all clusters
    - Cluster level: `clusters.<name>.jump_host` for cluster-specific settings
    - Node level: Per-node `jump_host` in detailed node configuration
    - Environment variable expansion supported (`${VAR}` or `$VAR` syntax)
    - Empty string (`""`) explicitly disables jump host inheritance
    - CLI `-J` option always takes precedence over configuration

  ### Improvements
  - **SSH Config ProxyJump Directive**: Apply SSH config ProxyJump directive when -J option not specified (issue #117)
    - ProxyJump directive from SSH config now properly applied as fallback
    - Priority order: CLI `-J` > config.yaml jump_host > SSH config ProxyJump
  - **Documentation**: Added comprehensive jump_host configuration documentation
    - Updated README.md with configuration examples
    - Added docs/architecture/ssh-jump-hosts.md with detailed architecture
    - Updated example-config.yaml with all jump_host configuration patterns

  ### Bug Fixes
  - **Jump Host Authentication**: Fix jump host authentication fails with empty SSH agent (issue #116)
    - Properly handle empty SSH agent when authenticating through jump hosts
    - Fall back to key-based authentication when agent has no identities
  - **Config Fallback**: Apply expand_env_vars to jump_host and add config fallback for exec/interactive
    - Environment variables now properly expanded in jump_host values
    - Configuration jump_host properly used in exec and interactive modes

  ### CI/CD Improvements
  - Updated GitHub workflows

  ### Technical Details
  - Added ConfigResolver::resolve_jump_host() method for centralized jump host resolution
  - Jump host priority: CLI > Node > Cluster > Global defaults
  - Comprehensive test coverage: 424 lines of tests for jump_host configuration
  - Integration tests for all priority levels and edge cases

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 19 Dec 2025 00:00:00 +0900

bssh (1.5.1-1~jammy1) jammy; urgency=medium

  * v1.5.1
  ### New Features
  None

  ### Improvements
  None

  ### Bug Fixes
  - **SSH Disconnect Error Handling**: Handle SshError(Disconnect) during authentication for password fallback (issue #113)
    - Fixed handling of SSH disconnect errors during authentication phase
    - Enables proper password fallback when SSH connection is disconnected during auth

  ### CI/CD Improvements
  None

  ### Technical Details
  - Extended auth error matching to include SshError::Disconnect variant
  - Improved robustness of password fallback authentication flow

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Wed, 18 Dec 2025 00:00:00 +0900

bssh (1.5.0-1~jammy1) jammy; urgency=medium

  * v1.5.0
  ### New Features
  - **pdsh Compatibility Mode**: Full pdsh-style command line compatibility
    - `-w hosts` option mapped to `-H hosts` for target host specification
    - `-x hosts` option mapped to `--exclude hosts` for host exclusion
    - `-f N` option mapped to `--parallel N` for fanout control
    - `-l user` option for remote username
    - `-N` option for disabling hostname prefix in output
    - `-b` option for batch mode (single Ctrl+C termination)
    - `-k` option for fail-fast mode (stop on first failure)
    - `-q` query mode to show target hosts and exit
  - **Hostlist Expressions**: pdsh-style range expansion support
    - Range expansion: `node[1-5]` → node1, node2, node3, node4, node5
    - Zero-padded ranges: `node[01-05]` → node01, node02, ...
    - Comma-separated values: `node[1,3,5]` → node1, node3, node5
    - Cartesian product: `rack[1-2]-node[1-3]` → 6 hosts
    - File input with `^/path/to/hostfile`
  - **In-TUI Log Panel**: Toggle visibility with `l` key
    - Color-coded by level (ERROR red, WARN yellow)
    - Configurable buffer size via BSSH_TUI_LOG_MAX_ENTRIES
  - **--connect-timeout Option**: Separate connection timeout from command timeout
    - Default: 30 seconds, minimum: 1 second

  ### Improvements
  - CI workflow simplification by merging jobs into single pipeline

  ### Bug Fixes
  - Fixed --timeout 0 handling to correctly treat as unlimited instead of ignoring
  - Fixed #[serial] attribute for env var tests to prevent race conditions
  - Fixed connect_timeout propagation through all SSH connection paths

  ### CI/CD Improvements
  - Simplified CI workflow by merging multiple jobs into single pipeline

  ### Technical Details
  - pdsh compatibility layer core infrastructure
  - Comprehensive hostlist expression parser with cartesian product support
  - Added explicit CLI test for --timeout 0 behavior

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Wed, 18 Dec 2025 00:00:00 +0900

bssh (1.4.2-1~jammy1) jammy; urgency=medium

  * v1.4.2
  ### New Features
  None

  ### Improvements
  None

  ### Bug Fixes
  - **PTY Session Fixes**: Fixed terminal escape sequence responses and paste functionality
    - Fixed terminal escape sequence responses displayed on first prompt when starting tmux (#90)
    - Fixed paste not working in PTY sessions (#89)

  ### CI/CD Improvements
  None

  ### Technical Details
  - Terminal handling improvements for PTY sessions
  - Better compatibility with tmux and terminal multiplexers

  ### Dependencies
  - Bumped dependencies to latest versions

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 16 Dec 2025 00:00:00 +0900

bssh (1.4.1-1~jammy1) jammy; urgency=medium

  * v1.4.1
  ### New Features
  None

  ### Improvements
  - **TUI Module Documentation**: Added comprehensive TUI module documentation to README.md and ARCHITECTURE.md
    - Detailed keyboard shortcuts reference table
    - View modes description table
    - TUI activation conditions and requirements
  - **Test Coverage**: Added 84 new tests for TUI and streaming execution
    - tests/tui_snapshot_tests.rs: 20 tests for TUI rendering
    - tests/tui_event_tests.rs: 36 tests for keyboard navigation and view transitions
    - tests/streaming_integration_tests.rs: 28 tests for streaming infrastructure
    - benches/large_output_benchmark.rs: Performance benchmarks for large output handling

  ### Bug Fixes
  - **Password Fallback Extension**: Extended password fallback to handle SSH agent authentication failures
    - Now correctly triggers for AgentAuthenticationFailed, AgentNoIdentities, AgentConnectionFailed, AgentRequestIdentitiesFailed
    - Added is_auth_error_for_password_fallback() helper for testability
    - Added unit tests and integration tests for password fallback

  ### CI/CD Improvements
  None

  ### Technical Details
  - Added insta 1.34 for snapshot testing
  - Added criterion 0.5 for benchmarking
  - Added mockall 0.12 for mocking in integration tests
  - Refactored test code for improved quality

  ### Dependencies
  - insta 1.34 (dev-dependency)
  - criterion 0.5 (dev-dependency)
  - mockall 0.12 (dev-dependency)

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 16 Dec 2025 00:00:00 +0900

bssh (1.4.0-1~jammy1) jammy; urgency=medium

  * v1.4.0
  ### New Features
  - **Sudo Password Support**: Added `-S/--sudo-password` flag for automated sudo authentication
    - Securely prompts for sudo password before command execution
    - Automatically detects and responds to sudo password prompts
    - Works with both streaming and non-streaming execution modes
    - `BSSH_SUDO_PASSWORD` environment variable support (with security warnings)
    - Uses `secrecy` crate for secure memory handling
    - Password cleared from memory immediately after use

  ### Improvements
  - **Password Fallback**: Improved SSH debugging for compatibility
    - Enhanced password authentication fallback logic
    - Better error messages for SSH connection issues
  - **Developer Tooling**: Added githooks setup script for development workflow

  ### Bug Fixes
  - Fixed clippy warnings for useless_vec and same_item_push
  - Improved SSH compatibility with password fallback mechanism

  ### CI/CD Improvements
  - Added setup script for githooks

  ### Technical Details
  - Secure memory handling with secrecy and zeroize crates
  - Automatic sudo prompt detection and response

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Sun, 15 Dec 2025 00:00:00 +0900

bssh (1.3.0-1~jammy1) jammy; urgency=medium

  * v1.3.0
  ### New Features
  - **Interactive TUI**: Added interactive Terminal User Interface with multiple view modes
    - Summary view: All nodes at a glance with progress bars
    - Detail view (1-9): Full output from specific node with scrolling
    - Split view (s): Monitor 2-4 nodes simultaneously
    - Diff view (d): Compare output from two nodes side-by-side
    - Auto-scroll (f): Toggle automatic scrolling
    - Navigation: Arrow keys, PgUp/PgDn, Home/End
    - Help (?): Show keyboard shortcuts
  - **Multi-node Stream Management**: Phase 2 streaming infrastructure
    - Real-time output modes for multi-node operations
    - Stream mode with [node] prefixes for real-time monitoring

  ### Bug Fixes
  - **PTY Escape Sequence Filtering**: Filter terminal escape sequence responses in PTY sessions
    - Fixed issue with terminal response codes appearing in output

  ### Technical Details
  - Implemented ratatui-based TUI rendering
  - Added multi-node output aggregation and display
  - Enhanced streaming infrastructure for real-time updates

 -- Jeongkyu Shin <inureyes@gmail.com>  Wed, 10 Dec 2025 00:00:00 +0900

bssh (1.2.2-1~jammy1) jammy; urgency=medium

  * v1.2.2
  ### Bug Fixes
  - **Backend.AI Auto-detection**: Improved host heuristics for Backend.AI environments
    - Added localhost and localhost.localdomain detection
    - Added IPv4 address validation (127.0.0.1, 192.168.x.x, etc.)
    - Enhanced detection for user@host, host:port, FQDN, IPv6 patterns
    - Users can now use `bssh localhost "command"` naturally in Backend.AI
    - 16 comprehensive tests added for host detection logic

  ### Technical Details
  - Extracted testable `looks_like_host_specification()` function
  - Added `is_ipv4_address()` helper with strict validation
  - Performance optimized with early returns
  - Updated ARCHITECTURE.md with detailed documentation

 -- Jeongkyu Shin <inureyes@gmail.com>  Tue, 29 Oct 2025 00:00:00 +0900

bssh (1.2.1-1~jammy1) jammy; urgency=medium

  * v1.2.1
  ### Bug Fixes
  - **Password Authentication**: Fixed password authentication fallback in interactive mode
    - Re-implemented proper password authentication fallback logic
    - Ensured password prompt works correctly after key-based auth fails
  - **Test Race Condition**: Fixed race condition in RankDetector tests
    - Added #[serial] attribute to prevent environment variable conflicts
    - Tests now run sequentially when accessing shared environment state

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 28 Oct 2025 00:00:00 +0900

bssh (1.2.0-1~jammy1) jammy; urgency=medium

  * v1.2.0
  ### BREAKING CHANGES
  - **Exit Code Behavior Changed**: Now returns main rank's actual exit code by default
    - Old behavior (v1.0-v1.1): Returns 0 only if all nodes succeed, 1 if any fail
    - New behavior (v1.2.0+): Returns main rank's actual exit code (matches MPI standard)
    - Migration: Use --require-all-success flag to preserve old behavior
    - Benefit: Preserves actual exit codes (139=SIGSEGV, 137=OOM, 124=timeout)

  ### New Features
  - **Exit Code Strategy**: Main rank exit code returned by default
    - Matches MPI standard tools (mpirun, srun, mpiexec)
    - Preserves actual exit codes for better diagnostics
    - --require-all-success flag for legacy behavior
    - --check-all-nodes flag for hybrid mode
    - Automatic main rank detection via BACKENDAI_CLUSTER_ROLE
  - **Example Scripts**: Added mpi_exit_code.sh and health_check.sh examples

  ### Improvements
  - Exit code behavior aligns with HPC and distributed computing best practices
  - Enables sophisticated error handling in shell scripts and CI/CD pipelines

  ### Bug Fixes
  - Fixed security-framework dependency version (downgraded from 3.5.1 to 2.12.1)
  - Fixed cargo clippy warnings in test code

  ### Testing
  - Added comprehensive exit code tests (86 total test cases)
  - Added serial test runner for environment-dependent tests
  - Documentation updates for breaking changes in README, CHANGELOG, ARCHITECTURE

  ### Dependencies
  - Updated security-framework to 2.12.1 for better compatibility

 -- Jeongkyu Shin <inureyes@gmail.com>  Sun, 27 Oct 2025 21:00:00 +0900

bssh (1.1.0-1~jammy1) jammy; urgency=medium

  * v1.1.0
  ### New Features
  - **macOS Keychain Integration**: Complete Phase 2 implementation of UseKeychain SSH option
    - Automatic passphrase storage in macOS Keychain after successful authentication
    - Automatic passphrase retrieval before prompting user
    - Secure memory handling with Zeroizing for all sensitive data
    - Integration with SSH config UseKeychain option per host
  - **ProxyUseFdpass Support**: Added ProxyUseFdpass SSH configuration option
    - Optimizes ProxyCommand usage by passing connected file descriptors
    - Reduces overhead from lingering processes and extra read/write operations
  - **Password Authentication Fallback**: Automatic password retry when key-based auth fails
    - Matches OpenSSH standard behavior
    - Interactive terminal detection with TTY checks
    - Works for both exec and interactive modes

  ### Improvements
  - **Security Enhancements**: Multiple security improvements from PR review
    - SSH key file ownership validation (prevents storing passphrases for others' keys)
    - User consent prompt before password fallback authentication
    - Rate limiting between authentication attempts (prevents brute-force)
    - World-readable SSH key permission warnings
  - **Code Quality**: Eliminated 251 lines of code duplication in connection logic
  - **Cross-Platform**: All macOS-specific code properly isolated with conditional compilation

  ### Bug Fixes
  - Fixed clippy warnings (unused_mut, unused_imports, dead_code) on non-macOS platforms
  - Fixed interactive mode missing use_keychain field causing authentication failures
  - Fixed password prompt not appearing when connecting to new servers

  ### Dependencies
  - Added security-framework crate for macOS Keychain API integration
  - Added libc crate for macOS user ID checks

 -- Jeongkyu Shin <inureyes@gmail.com>  Fri, 24 Oct 2025 17:31:48 +0900

bssh (1.0.0-1~jammy1) jammy; urgency=medium

  * v1.0.0
  ### New Features
  - **Comprehensive SSH Configuration Support**: Added ~71 SSH configuration options (~69% coverage of OpenSSH's 103 options)
    - Certificate Authentication Options: CertificateFile, CASignatureAlgorithms, HostbasedAuthentication, HostbasedAcceptedAlgorithms
    - Advanced Port Forwarding Control: GatewayPorts, ExitOnForwardFailure, PermitRemoteOpen
    - Command Execution and Automation: PermitLocalCommand, LocalCommand, RemoteCommand, KnownHostsCommand, ForkAfterAuthentication, SessionType, StdinNull
    - Host Key Verification & Security: NoHostAuthenticationForLocalhost, HashKnownHosts, CheckHostIP, VisualHostKey, HostKeyAlias, VerifyHostKeyDNS, UpdateHostKeys
    - Additional Authentication Options: NumberOfPasswordPrompts, EnableSSHKeysign
    - Network & Connection Options: BindInterface, IPQoS, RekeyLimit
    - X11 Forwarding Options: ForwardX11Timeout, ForwardX11Trusted
    - Authentication and Security Management: IdentitiesOnly, AddKeysToAgent, IdentityAgent, PubkeyAcceptedAlgorithms, RequiredRSASize, FingerprintHash
    - Include and Match directive support for flexible configuration
    - Support for both "Option Value" and "Option=Value" syntax

  ### Improvements
  - **Modular SSH Config Parser**: Refactored oversized parser.rs (1706 lines) into category-based modules (~200-350 lines each)
  - **Enhanced Security**: Comprehensive security hardening for SSH configuration
    - Path validation to prevent usage of sensitive system files
    - Memory exhaustion prevention with entry limits
    - Command injection prevention for LocalCommand and KnownHostsCommand
    - Token validation and dangerous character detection
    - Algorithm list validation with deduplication
  - **Terminology Cleanup**: Removed phase terminology from codebase and documentation for better clarity

  ### Bug Fixes
  - Fixed critical security vulnerabilities in SSH config parser (Priority: CRITICAL/HIGH)
  - Enhanced input validation and error handling

  ### CI/CD Improvements
  None

  ### Technical Details
  - Enhanced SSH configuration merging logic with proper priority handling
  - Comprehensive test coverage: 278 tests including parser, resolver, integration, and security tests
  - Improved code organization and maintainability with modular structure
  - Support for scalar option override and vector option accumulation with deduplication

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 24 Oct 2025 00:00:00 +0900

bssh (0.9.1-1~jammy1) jammy; urgency=medium

  * v0.9.1
  ### New Features
  None

  ### Improvements
  - **PTY Terminal Modes**: Complete implementation of PTY terminal modes for better interactive session support
  - **Shift Key Input Support**: Full Shift key input handling in PTY mode for proper terminal behavior

  ### Bug Fixes
  - Fixed terminal mode implementation for PTY sessions
  - Improved Shift key input handling in interactive mode

  ### CI/CD Improvements
  None

  ### Technical Details
  - Enhanced terminal mode settings for PTY allocation
  - Implemented proper terminal flag handling for interactive sessions
  - Improved keyboard input processing for special keys

  ### Dependencies
  None

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 14 Oct 2025 00:00:00 +0900

bssh (0.9.0-1~jammy1) jammy; urgency=medium

  * v0.9.0
  ### New Features
  - **SSH ProxyJump File Transfer Support**: Added complete file transfer operations through SSH jump hosts (#39)
    - Upload single files through jump host chains
    - Download single files through jump hosts
    - Upload directories recursively through jump hosts
    - Download directories through jump hosts
    - All file transfer operations now fully support multi-hop SSH connections

  ### Improvements
  - **Jump Host Interactive Mode**: Interactive shell sessions now work through jump hosts
    - Dynamic timeout calculation based on hop count (30s base + 15s per hop)
    - Prevents premature timeouts on multi-hop connections
    - Full authentication support (SSH keys, agent, password) for each hop
  - **Package Updates**: Updated dependencies to latest versions for better security and stability

  ### Bug Fixes
  - Fixed interactive mode timeout issues when connecting through jump hosts
  - Fixed file transfer operations not working with jump host chains

  ### CI/CD Improvements
  None

  ### Technical Details
  - Parallel Executor Integration: Jump host support across all parallel operations
  - Updated executor.rs to propagate jump_hosts to all node operations
  - Maintains backward compatibility with Option<&str> type
  - All *_to_node() functions now accept jump_hosts parameter

  ### Dependencies
  - Added serial_test dependency for thread-safe environment variable testing
  - Updated various dependencies for security patches

  ### Breaking Changes
  None

  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Mon, 14 Oct 2025 00:00:00 +0900

bssh (0.8.0-1~jammy1) jammy; urgency=medium

  * v0.8.0
  ### New Features
  - **SSH Port Forwarding**: Added comprehensive SSH port forwarding support with local (-L), remote (-R), and dynamic (-D) SOCKS5 forwarding (#31)
    - Local port forwarding for accessing remote services through local ports
    - Remote port forwarding for exposing local services to remote servers
    - Dynamic port forwarding with SOCKS5 proxy support
    - Multiple simultaneous port forwarding configurations
    - Full integration with all authentication methods
  
  ### Improvements
  - **Error Handling**: Removed dangerous unwrap() calls throughout the codebase for better stability (#35)
  - **SSH Error Messages**: Improved error messages for SSH connection failures and authentication issues (#36)
  - **Command Execution**: Enabled automatic command execution for better usability
  
  ### Bug Fixes
  - Fixed potential panics from unwrap() calls in production code
  - Improved error recovery and reporting for SSH operations
  
  ### CI/CD Improvements
  None
  
  ### Technical Details
  - Complete SSH port forwarding implementation with Phase 1 and Phase 2 features
  - Comprehensive port forwarding architecture documentation
  - Enhanced error handling with proper Result types and context
  - Fixed DNS resolution errors in forwarding tests
  
  ### Dependencies
  - No major dependency changes in this release
  
  ### Breaking Changes
  None
  
  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Thu, 12 Sep 2025 00:00:00 +0900

bssh (0.7.0-1~jammy1) jammy; urgency=medium

  * v0.7.0
  ### New Features
  - **SSH Jump Host Support**: Added infrastructure and CLI integration for SSH jump hosts using OpenSSH-compatible -J syntax (#30)
    - Robust parsing of OpenSSH ProxyJump format (e.g., `user@host:port,user2@host2:port2`)
    - Support for single and multiple jump hosts in chain
    - IPv6 address handling with bracket notation
    - Comprehensive input validation and error handling
    - Full integration with all commands (exec, ping, upload, download)
  
  ### Improvements
  - **Ubuntu PPA**: Improved Ubuntu PPA build process and package generation
  - **Debian Packaging**: Enhanced Cargo vendor support for older distribution compatibility
  
  ### Bug Fixes
  - Fixed Ubuntu PPA update issues
  - Fixed deprecated GitHub Actions by replacing actions-rs/toolchain with dtolnay/rust-toolchain
  
  ### CI/CD Improvements
  - Modernized GitHub Actions workflow by removing deprecated actions
  - Improved build process for Debian-based distributions
  
  ### Technical Details
  - Jump host parser implementation with comprehensive error handling
  - OpenSSH-compatible command-line syntax for ProxyJump functionality
  - Enhanced logging for jump host connection debugging
  
  ### Dependencies
  - No major dependency changes in this release
  
  ### Breaking Changes
  None
  
  ### Known Issues
  None

 -- Jeongkyu Shin <inureyes@gmail.com>  Sat, 30 Aug 2025 08:48:19 +0900