Breaking change
Short options on the et client now match OpenSSH. These flags changed meaning: -c, -t, -p, -l, -x, -f, -N, -v, and -e. The previous behavior is available as --command, --tunnel, --port, --logdir, --kill-other-sessions, --forward-ssh-agent, --no-terminal, --verbose, and --noexit.
The wire protocol is still version 6, so 7.0.0 and 7.1.0 peers still connect.
What's Changed
- ci: fix cowbuilder failure on Debian forky — cowdancer removed from repo by @MisterTea with @Copilot in #771
- Fix GCC 15 build failure — Ubuntu 26.04 (Resolute) PPA by @chenlichao in #774
- Add GCC-16 to CI by @MisterTea with @Copilot in #776
- Add windows deployment workflows by @hyec in #777
- Fix four pre-auth and privilege-escalation issues from security notices. by @MisterTea in #784
- Keep the client alive when the console fd is not a tty by @jshort in #788
- Harden HTM sessions, add Windows support, and raise Unix coverage by @MisterTea in #801
- Stop a stuck client reconnect from blocking every new connection by @vzd3v in #798
- Fix terminal size query failure propagation by @xz-dev in #803
- Bring Windows build and tests to feature parity by @MisterTea in #802
- Disable SO_LINGER: a blocking close() freezes the whole socket layer for 5 seconds by @marchaase in #792
- Flush large terminal output on Ctrl+C (#631) by @MisterTea in #804
- Speak tmux -CC from HTM so stock terminals can attach by @MisterTea in #805
- Replace select() with epoll/kqueue and poll() by @splhack in #809
- Add optional raw stack traces by @splhack in #812
- htm: start window ids at @0 and add affinities GUI e2e by @MisterTea in #813
- Fix session and forwarding FD leaks by @splhack in #810
- Honor explicit TCP forwarding destinations by @msokolov-meta in #811
- Isolate SSH config and keep destination options off the jumphost by @MisterTea in #814
- Preserve partial socket write progress by @miaoever in #815
- Port all tests to Windows; WSAPoll backend; production code already ported by @MisterTea in #817
- feat: support OpenWrt builds, packages, and CI (#749) by @MisterTea in #818
- Add Rocky/Gentoo CI and show SSH login output by @MisterTea in #816
- fix: parse comma-separated SSH-style tunnels independently (#789) by @MisterTea in #847
- fix: link executable stacks as non-executable (#677) by @MisterTea in #834
- fix: tolerate partial listener bind failures (#669) by @MisterTea in #833
- fix: capture large subprocess output without deadlock (#655) by @MisterTea in #831
- docs: explain the installed Eternal Terminal programs (#219) by @MisterTea in #821
- fix: isolate malformed client packets instead of aborting the server (#799) by @MisterTea in #848
- fix: use a portable login-shell argv[0] (#683) by @MisterTea in #835
- docs: explain client, server, and helper binaries (#752) by @MisterTea in #841
- feat: optionally close the remote session on SIGHUP (#707) by @MisterTea in #837
- fix: honor ProxyJump none in SSH config (#653) by @MisterTea in #830
- fix: resolve nested SSH Include paths relative to their file (#747) by @MisterTea in #840
- Fix crash signal infinite loop (#570) by @MisterTea in #829
- feat: raw command channel for et by @MisterTea in #854
- feat: positional remote command by @MisterTea in #850
- feat: close disconnected etterminal sessions after a timeout by @MisterTea in #855
- feat: local OpenSSH -V and -G queries by @MisterTea in #852
- feat: propagate remote command exit status by @MisterTea in #851
- feat: runtime -D and -W forwards by @MisterTea in #849
- fix: drop journald wall text from tmux -CC streams by @MisterTea in #857
- feat: cache slow CI dependency and compiler builds by @MisterTea in #859
- feat: OpenSSH ControlMaster mux for et by @MisterTea in #853
- test: run htm e2e panes under /bin/sh even when SHELL is set by @tphakala in #865
- fix: accept TERM values that contain an underscore in etterminal (#860) by @tphakala in #863
- fix: capture SSH banner stderr during subprocess startup (#769) by @MisterTea in #843
- feat: install et1 with a one-week disconnect timeout by @MisterTea in #858
- fix: stop recover from stalling when both sides have large catchup (#861) by @tphakala in #864
- feat!: give et short flags their OpenSSH meanings by @MisterTea in #867
- Named sessions and etserver restart survival by @epsalmond in #793
- feat: honor ssh_config forwards, SendEnv, and session options by @MisterTea in #870
- fix: initial connect gives up, and reconnect catchup no longer deadlocks (#866, #862, #861) by @MisterTea in #868
- fix: end sessions when the foreground shell exits (#448) by @MisterTea in #827
- fix: keep SSH agent forwarding stable across reconnects (#506) by @MisterTea in #828
- fix: keep listening when one address family is unavailable (#660) by @MisterTea in #832
- fix: export SSH_TTY for remote sessions (#425) by @MisterTea in #825
- fix: bound per-connection port-forward work (#298) by @MisterTea in #823
- Add et --ctl: drive a session through a local control socket by @Kronuz in #819
- Move platform-specific code behind per-OS implementations by @MisterTea in #872
- fix: keep VS Code Remote-SSH sessions alive over et across sleep by @MisterTea in #874
- Make et, etserver, and etterminal mains testable and cover their failure paths by @MisterTea in #875
- fix: handle client setup failures without exiting or hanging by @jshort in #873
- fix: ship et1 in the OpenWrt package by @MisterTea in #877
- fix: show SSH auth banners on the terminal (#769) by @MisterTea in #878
- docs: explain how to use et with VS Code and Cursor Remote-SSH by @MisterTea in #876
- Add etctl for driving ET sessions from scripts by @Kronuz in #820
- Fail the build on compiler warnings by @MisterTea in #884
- feat: send recorded ssh-agent session bindings on forwarded agent connections (1/3) by @akainth015 in #880
- Restore real MSan coverage and speed up CI by @MisterTea in #897
- Document telemetry and how to turn it off by @bos in #896
- Fix remaining unsafe temporary paths (CVE-2023-23558) by @bos in #893
- fix: sort wildcard Include matches like OpenSSH by @gaborbernat in #888
- Fix/windows console modifier nul by @jtbraun in #886
- Bound descriptors held by port forwarding by @bos in #892
- Stop running unpinned code in CI and release jobs by @bos in #894
- Survive hostile remote output in et and etctl by @bos in #895
- feat: record the ssh-agent session binding made by the bootstrap ssh (2/3) by @akainth015 in #881
- Refuse forged reattach replies and recover from tampered packets by @bos in #898
- Fix local privilege escalation and denial of service in etserver and htm by @bos in #890
- feat: bind forwarded ssh-agent connections to the bootstrap ssh's host key (3/3) by @akainth015 in #879
- fix: don't treat plain '%' lines as tmux -CC by @MisterTea in #900
- chore: set the project version to 7.1.0 by @MisterTea in #901
New Contributors
- @chenlichao made their first contribution in #774
- @hyec made their first contribution in #777
- @xz-dev made their first contribution in #803
- @marchaase made their first contribution in #792
- @msokolov-meta made their first contribution in #811
- @miaoever made their first contribution in #815
- @tphakala made their first contribution in #865
- @epsalmond made their first contribution in #793
- @akainth015 made their first contribution in #880
- @bos made their first contribution in #896
- @gaborbernat made their first contribution in #888
- @jtbraun made their first contribution in #886
Full Changelog: et-v7.0.0...et-v7.1.0