1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-22 21:01:36 +03:00
Commit Graph

201 Commits

Author SHA1 Message Date
Wez Furlong
6f375e29a2
wezterm-ssh: update pty version 2024-12-05 08:35:33 -07:00
Sean Estabrooks
c3fd4b068c Address some lint warnings from Clippy 2024-09-14 09:18:24 -07:00
Sean Estabrooks
1e4dcf0244 Don't pass ProxyCommand, just look it up
It doesn't make much sense to pass this value, especially
after adding the ProxyUseFDpass functionality, which
accesses the config directly anyway.
2024-09-14 09:18:24 -07:00
Sean Estabrooks
caf450b873 Implement ProxyUseFDpass for ssh
This allows the ProxyUseFDpass ssh config option, to be
used on Linux and Mac OS.  This was requested in
enhancement issue #6093
2024-09-14 09:18:24 -07:00
Naitik Shah
463df9ebed kill and reap ProxyCommand
The wrapper struct ensures ensures the child process spawned for
the ProxyCommand is cleaned up under all the various error scenarios
(such as auth failures etc), as well as in the normal successful use
case. This includes killing it if necessary, and then waiting for it.
2024-07-15 06:14:04 -07:00
Wez Furlong
5b0642d2dc
fix unused mut warning 2024-07-14 07:45:54 -07:00
dependabot[bot]
b158472099 build(deps): bump the all group across 1 directory with 2 updates
Bumps the all group with 2 updates in the / directory: [http_req](https://github.com/jayjamesjay/http_req) and [gethostname](https://github.com/swsnr/gethostname.rs).


Updates `http_req` from 0.10.3 to 0.11.0
- [Release notes](https://github.com/jayjamesjay/http_req/releases)
- [Commits](https://github.com/jayjamesjay/http_req/compare/v0.10.3...v0.11.0)

Updates `gethostname` from 0.4.3 to 0.5.0
- [Changelog](https://github.com/swsnr/gethostname.rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/swsnr/gethostname.rs/compare/v0.4.3...v0.5.0)

---
updated-dependencies:
- dependency-name: http_req
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: gethostname
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-13 06:49:29 -07:00
Wez Furlong
44c1335856
wezterm-ssh: avoid configuration default config files in tests 2024-07-13 06:39:11 -07:00
Wez Furlong
accd16e72e
deps: update rstest
closes: https://github.com/wez/wezterm/pull/5512
2024-06-07 17:53:46 -07:00
Wez Furlong
0fcd4a847c
move uds stuff into new wezterm-uds crate
This centralizes the conditional imports and makes a home
for the IoSafe trait annotation for smol/async-io compat.
2024-05-13 17:56:57 -07:00
Wez Furlong
6ad0da98d8
deps: remove smol-potat, update futures-lite
smol-potat hasn't had updates in 4 years and was bifurcating some
big deps.  It wasn't necessary; it was trivially easy to replace
with smol::block_on with no meaningful increase in boilerplate,
and the result is much more understandable in purpose and effect.
2024-05-13 11:43:10 -07:00
Wez Furlong
944e0b29b6
deps: update to new filenamegen 2024-05-13 11:19:33 -07:00
Wez Furlong
1ca5e6cc90
deps: upgrade smol to 2.0 2024-05-13 10:26:29 -07:00
Wez Furlong
f0e62d26f3
update libssh-rs 2024-05-13 07:19:17 -07:00
Wez Furlong
6b93ee19e7
mux: record client ssh_auth_sock information
This commit expands the set of data that we track for each client to
include the SSH_AUTH_SOCK. This defaults to the value of that env var on
the machine where the ClientId is constructed, which may be remote from
the mux server.

For the proxy scenario, a remote SSH_AUTH_SOCK path is not addressable,
and what we really want is the local SSH_AUTH_SOCK path from that SSH
session, so we introduce awareness of whether the current session is a
proxy session. Proxy sessions register the mux-local-proxy-id during the
setup of the proxy, but we don't apply the identity to the mux. Instead,
we wait for the remote client to send their identity and that is
annotate to show that it has been routed via a proxy and, crucially, has
the SSH_AUTH_SOCK replaced with the mux-local-proxy-id SSH_AUTH_SOCK.

```
; wezterm cli list-clients
USER HOST                          PID CONNECTED     IDLE         WORKSPACE FOCUS SSH_AUTH_SOCK
wez  foo                        336500 86.944834352s 944.834352ms default       3 /home/wez/.1password/agent.sock
wez  foo (via proxy pid 337457) 337314 1.944834352s  944.834352ms               4 /tmp/ssh-XXXXTfGSp7/agent.337456
```

For the SSH_AUTH_SOCK to be populated, ssh agent forwarding also needs
to be enabled for SSH exec() calls; previously it was enabled only for
pty channels.

Since this commit changes the ABI of the mux protocol, the codec
version has been bumped.
2024-05-09 07:45:19 -07:00
Riatre
9b811c7a16
Wire up agent forward for libssh backend (#5345)
* Wire up agent forward for libssh backend

TSIA.

There's a drive-by change in sftpwrap.rs for bumping to new libssh-rs.
2024-05-08 08:09:07 -07:00
dependabot[bot]
8fa4ba9ace build(deps): bump base64 in the all group across 1 directory
Bumps the all group with 1 update in the / directory: [base64](https://github.com/marshallpierce/rust-base64).


Updates `base64` from 0.21.7 to 0.22.1
- [Changelog](https://github.com/marshallpierce/rust-base64/blob/master/RELEASE-NOTES.md)
- [Commits](https://github.com/marshallpierce/rust-base64/compare/v0.21.7...v0.22.1)

---
updated-dependencies:
- dependency-name: base64
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-05 17:59:15 -07:00
emc2314
c2fb3cb760
Fix SSH config %h using Host (#5163)
* Fix SSH config %h using Host

* Fix test and use workaround for 2nd pass parsing

* Better implementation from @wheatdog
2024-05-05 13:43:52 -07:00
Wez Furlong
2eac806d8c
deps: rstest to 0.19 2024-05-04 17:12:55 -07:00
dependabot[bot]
15e0e61fe1 Bump whoami from 1.4.1 to 1.5.0
Bumps [whoami](https://github.com/ardaku/whoami) from 1.4.1 to 1.5.0.
- [Changelog](https://github.com/ardaku/whoami/blob/v1/CHANGELOG.md)
- [Commits](https://github.com/ardaku/whoami/compare/v1.4.1...v1.5.0)

---
updated-dependencies:
- dependency-name: whoami
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-05 08:52:35 -07:00
Wez Furlong
ba85958a61
deps: update env-logger
Note that we are pinned on 0.10 for env-bootstrap, where we use it
only for its module filter parser.
2024-01-20 16:01:10 -07:00
dependabot[bot]
68d9cfc6ad build(deps): bump the all group with 6 updates
Bumps the all group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [k9](https://github.com/aaronabramov/k9) | `0.11.6` | `0.12.0` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.78` | `1.0.79` |
| [serde](https://github.com/serde-rs/serde) | `1.0.193` | `1.0.194` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.109` | `1.0.110` |
| [clap_complete](https://github.com/clap-rs/clap) | `4.4.5` | `4.4.6` |
| [thiserror](https://github.com/dtolnay/thiserror) | `1.0.53` | `1.0.56` |


Updates `k9` from 0.11.6 to 0.12.0
- [Commits](https://github.com/aaronabramov/k9/commits)

Updates `anyhow` from 1.0.78 to 1.0.79
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.78...1.0.79)

Updates `serde` from 1.0.193 to 1.0.194
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.193...v1.0.194)

Updates `serde_json` from 1.0.109 to 1.0.110
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.109...v1.0.110)

Updates `clap_complete` from 4.4.5 to 4.4.6
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.4.5...clap_complete-v4.4.6)

Updates `thiserror` from 1.0.53 to 1.0.56
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.53...1.0.56)

---
updated-dependencies:
- dependency-name: k9
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: anyhow
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: clap_complete
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-03 10:29:24 -07:00
Wez Furlong
914f18b19c
remove openssl pinning, cargo update
refs: https://github.com/sfackler/rust-openssl/issues/1645
2023-09-04 13:31:03 -07:00
cycleke
211bce5037 ssh: apply HostKeyAlgorithms in ssh config 2023-08-06 10:40:44 -07:00
Wez Furlong
b98923174c
bump some deps, and cargo update 2023-07-09 18:26:46 -07:00
Wez Furlong
9e36775acf
ssh: improve host key verification error messaging
See screenshots attached to #3941 to see how it renders
2023-07-06 10:42:58 -07:00
Wez Furlong
f4b82c583c
fix libssh booboo 2023-05-29 21:18:02 -07:00
Chip Senkbeil
f88f1aa58a Fix sftp::FilePermissions::is_readonly to properly report readonly status 2023-05-27 09:46:36 -07:00
Wez Furlong
fa0f538d36
mux: detect dead ssh session and reconnect
The issue was that the session was rendered dead/unusable by closing
all of the tabs.

We now detect this and create a new session.

refs: https://github.com/wez/wezterm/discussions/3480#discussioncomment-5567569
2023-04-10 20:47:17 -07:00
Wez Furlong
0ca050e09d
expose the tty name associated with a pane 2023-04-06 17:13:07 -07:00
Wez Furlong
c3472cc969
ssh: fix token expansion for ProxyCommand
refs: https://github.com/wez/wezterm/issues/3437
2023-04-03 17:04:53 -07:00
Wez Furlong
d6e8271b5b
update libssh-rs dep to latest build
Don't need to point to the git repo for this any more, just
use the published release.
2023-03-30 06:39:56 -07:00
Wez Furlong
bc7acc18e0
fixup images with the multiplexer
* Translate from File to EncodedFile as needed
* Adopt blob leases in the mux server
* Fix an issue where the first image sent by the mux server would
  be replaced on the client by its background image, if configured.
  Removed the ImageData::id field to resolve this: you should use
  the hash field instead to identify and disambiguate images.
  Bumped the termwiz API version because this is conceptually
  a breaking change to the API

refs: https://github.com/wez/wezterm/issues/3343
2023-03-23 21:43:28 -07:00
Wez Furlong
f56069e279
wezterm-ssh: fix occasional segv on libssh shutdown
The shutdown is due to an openssl race condition:
refs: https://github.com/openssl/openssl/issues/6214

which is worked around by explicitly telling it not
to shutdown at process exit in:
refs: https://github.com/sfackler/rust-openssl/pull/1324

The mitigation is in the updated libssh crate, so bump it
to pull it in.

This makes `cargo nextest run` run clean for me on linux.
2023-03-23 13:44:00 -07:00
Wez Furlong
a9baa45157
wezterm-ssh: tidy up test output
and fixup some imports, which obscure the heart of this change!

The key thing is: we no longer unconditionally write directly to stderr;
use eprintln so that the test harness can capture stderr.
2023-03-23 12:59:02 -07:00
Wez Furlong
601e32e625
rustfmt 2023-03-21 08:08:03 -07:00
Wez Furlong
c781be3124
wezterm-ssh: fix parsing of proxycommand
refs: https://github.com/wez/wezterm/issues/3307
2023-03-21 08:04:59 -07:00
Wez Furlong
a6f857c14f
deps: update predicates for wezterm-ssh tests 2023-03-19 23:00:25 -07:00
dependabot[bot]
9fb07f20cd build(deps): bump rstest from 0.16.0 to 0.17.0
Bumps [rstest](https://github.com/la10736/rstest) from 0.16.0 to 0.17.0.
- [Release notes](https://github.com/la10736/rstest/releases)
- [Changelog](https://github.com/la10736/rstest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/la10736/rstest/compare/0.16.0...0.17.0)

---
updated-dependencies:
- dependency-name: rstest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-19 22:19:11 -07:00
Jalil David Salamé Messina
d541e2e13d fix(clippy): Remove closures where possible
- Removes closures and function calls for types that implement default:

  ```rust
  // Change
  let _my_str = get_str().unwrap_or(String::new);
  // To
  let _my_str = get_str().unwrap_or_default();
  ```

- Uses the `.cloned()/.copied()` methods where possible
- Use function pointer instead of simple closure

May improve performace, as closures generate more code, and this might
unlock some inlining opportunities.
2023-03-19 08:41:38 -07:00
Wez Furlong
e090eb9eae
Image decoding is now done in a bg thread
Continuing from the previous commit, this shifts:

* In-memory data -> temporary file
* Image decoding -> background thread

The background thread asynchronously decodes frames and
sends them to the render thread via a bounded channel.

While decoding frames, it writes them, uncompressed, to
a scratch file so that when the animation loops, it is
a very cheap operation to rewind and pull that data
from the file, without having to burn CPU to re-decode
the data from the start.

Memory usage is bounded to 4 uncompressed frames while
decoding, then 3 uncompressed frames (triple buffered)
while looping over the rest.

However, disk usage is N uncompressed frames.

refs: https://github.com/wez/wezterm/issues/3263
2023-03-17 11:41:20 -07:00
Wez Furlong
5c4a84726e
wezterm-ssh: fix leaky tests, as described in https://nexte.st/book/leaky-tests.html 2023-03-12 20:34:37 -07:00
Wez Furlong
2d05f8f1f2
ssh: support %l and %L in config files
We also log a warning when an unsupported token is used.

refs: https://github.com/wez/wezterm/issues/3176
2023-03-01 18:44:11 -07:00
Wez Furlong
0ac1cbc47c
deps: socket2 -> 0.5 2023-02-26 22:33:28 -07:00
Wez Furlong
3509e210ce
termwiz: bump version ready for publish 2023-02-12 06:57:31 -07:00
Wez Furlong
0006014f02
ssh: detect exit-signal state for channels
Need to use a newer version of libssh-rs that can report this state,
as the underlying libssh doesn't fold it into the process exit
status.

refs: https://github.com/wez/wezterm/issues/3095
2023-02-11 10:03:44 -07:00
Wez Furlong
a5b449f364
ssh: do our own proxycommand handling
Adapt the code we were using for libssh2 and use it for both
libssh and libssh2 so that we have consistent proxy command
support on both unix and windows, and both versions of the
ssh libraries.

This may help resolve the linked issue on windows, or at least,
uncover the next layer of problem(s).

refs: https://github.com/wez/wezterm/issues/3083
2023-02-09 09:08:46 -07:00
Wez Furlong
33f25e9ce6
reduce latency when heavily using foreground process info
The tcgetpgrp call appears to have high variance in latency, ranging
from 200-700us on my system.

If you have 10 tabs and mouse over the tab bar, that's around 7ms
spent per frame just figuring out the foreground process; that doesn't
include actually extracting the process executable or current working
directory paths.

This was exacerbated by the mouse move events triggering a tab bar
recompute on every pixel of mouse movement.

This commit takes the following steps to resolve this:

* We now only re-compute the tab bar when the UI item is changed by
  a mouse movement
* A simple single-item cache is now used on unix that allows the caller
  to proceed quickly with stale-but-probably-still-mostly-accurate data
  while queuing up an update to a background thread which can absorb
  the latency.

The result of this is that hovering over several tabs in quick
succession no longer takes a noticeable length of time to render the
hover, but the consequence is that the contents of a given tab may be
stale by 300-400ms.

I think that trade-off is worth while.

We already have a similar trade-off on Windows, although we don't
yet do the updates in a different thread on Windows. Perhaps in
a follow up commit?

refs: https://github.com/wez/wezterm/issues/2991
2023-01-21 15:25:57 -07:00
Wez Furlong
d34297cd2c
update base64, work around another batch of breaking API changes
closes: https://github.com/wez/wezterm/pull/2931
2023-01-08 18:49:45 -07:00
Wez Furlong
a31ba8738c
ssh: respect AddressFamily for environments with broken ipv6
We have to manually connect for this to work well across both
underlying libraries. libssh in particular doesn't support it
at all.

refs: https://github.com/wez/wezterm/issues/2893
2022-12-26 16:18:18 -07:00