From 6e296eb4b6b9f7cef8a597f572ff9edf4e58800b Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Fri, 15 Nov 2024 22:27:45 +0000 Subject: [PATCH] ssh: Use openbsd nc on macOS (#20751) Co-authored-by: Conrad Irwin --- Cargo.lock | 1 + crates/remote/Cargo.toml | 1 + crates/remote/src/ssh_session.rs | 14 +++++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 0c4ea47526..ff5d7540d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9986,6 +9986,7 @@ dependencies = [ "tempfile", "thiserror", "util", + "which 6.0.3", ] [[package]] diff --git a/crates/remote/Cargo.toml b/crates/remote/Cargo.toml index 8a199c56f6..69d1d97c59 100644 --- a/crates/remote/Cargo.toml +++ b/crates/remote/Cargo.toml @@ -38,6 +38,7 @@ tempfile.workspace = true thiserror.workspace = true util.workspace = true release_channel.workspace = true +which.workspace = true [dev-dependencies] gpui = { workspace = true, features = ["test-support"] } diff --git a/crates/remote/src/ssh_session.rs b/crates/remote/src/ssh_session.rs index c607f0a0ec..20795be201 100644 --- a/crates/remote/src/ssh_session.rs +++ b/crates/remote/src/ssh_session.rs @@ -1428,9 +1428,21 @@ impl SshRemoteConnection { } }); + anyhow::ensure!( + which::which("nc").is_ok(), + "Cannot find nc, which is required to connect over ssh." + ); + // Create an askpass script that communicates back to this process. let askpass_script = format!( - "{shebang}\n{print_args} | nc -U {askpass_socket} 2> /dev/null \n", + "{shebang}\n{print_args} | {nc} -U {askpass_socket} 2> /dev/null \n", + // on macOS `brew install netcat` provides the GNU netcat implementation + // which does not support -U. + nc = if cfg!(target_os = "macos") { + "/usr/bin/nc" + } else { + "nc" + }, askpass_socket = askpass_socket.display(), print_args = "printf '%s\\0' \"$@\"", shebang = "#!/bin/sh",