History

remote: Add ssh timeout setting (#44823)

Closes #21527 Release Notes: - Added a setting to specify the ssh connection timeout ---------

Marco Mihai Condrache committed 11 months ago

Commit 6401ac01 parent c20cbba4 files · +20 −3Browse files

Unified · Split

4 files
  1. crates/recent_projects/src/remote_servers.rs +1 −0
  2. crates/remote/src/transport/ssh.rs +15 −3
  3. crates/settings/src/settings_content.rs +3 −0
  4. crates/zed/src/zed/open_listener.rs +1 −0
crates/recent_projects/src/remote_servers.rs+1−0
@@ -1525,6 +1525,7 @@ impl RemoteServerProjects { · 1524 unmodified lines
15251525 args: connection_options.args.unwrap_or_default(),
15261526 upload_binary_over_ssh: None,
15271527 port_forwards: connection_options.port_forwards,
1528+ connection_timeout: connection_options.connection_timeout,
15281529 })
15291530 });
15301531 }
crates/remote/src/transport/ssh.rs+15−3
@@ -55,6 +55,7 @@ pub struct SshConnectionOptions { · 54 unmodified lines
5555 pub password: Option<String>,
5656 pub args: Option<Vec<String>>,
5757 pub port_forwards: Option<Vec<SshPortForwardOption>>,
58+ pub connection_timeout: Option<u16>,
5859
5960 pub nickname: Option<String>,
6061 pub upload_binary_over_ssh: bool,
@@ -71,6 +72,7 @@ impl From<settings::SshConnection> for SshConnectionOptions { · 10 unmodified lines
7172 nickname: val.nickname,
7273 upload_binary_over_ssh: val.upload_binary_over_ssh.unwrap_or_default(),
7374 port_forwards: val.port_forwards,
75+ connection_timeout: val.connection_timeout,
7476 }
7577 }
7678 }
@@ -670,7 +672,12 @@ impl SshRemoteConnection { · 593 unmodified lines
670672
671673 delegate.set_status(Some("Downloading remote development server on host"), cx);
672674
673− const CONNECT_TIMEOUT_SECS: &str = "10";
675+ let connection_timeout = self
676+ .socket
677+ .connection_options
678+ .connection_timeout
679+ .unwrap_or(10)
680+ .to_string();
674681
675682 match self
676683 .socket
@@ -681,7 +688,7 @@ impl SshRemoteConnection { · 4 unmodified lines
681688 "-f",
682689 "-L",
683690 "--connect-timeout",
684− CONNECT_TIMEOUT_SECS,
691+ &connection_timeout,
685692 url,
686693 "-o",
687694 &tmp_path_gz.display(self.path_style()),
@@ -709,7 +716,7 @@ impl SshRemoteConnection { · 21 unmodified lines
709716 "wget",
710717 &[
711718 "--connect-timeout",
712− CONNECT_TIMEOUT_SECS,
719+ &connection_timeout,
713720 "--tries",
714721 "1",
715722 url,
@@ -1226,6 +1233,7 @@ impl SshConnectionOptions { · 510 unmodified lines
12261233 password: None,
12271234 nickname: None,
12281235 upload_binary_over_ssh: false,
1236+ connection_timeout: None,
12291237 })
12301238 }
12311239
@@ -1252,6 +1260,10 @@ impl SshConnectionOptions { · 20 unmodified lines
12521260 pub fn additional_args(&self) -> Vec<String> {
12531261 let mut args = self.additional_args_for_scp();
12541262
1263+ if let Some(timeout) = self.connection_timeout {
1264+ args.extend(["-o".to_string(), format!("ConnectTimeout={}", timeout)]);
1265+ }
1266+
12551267 if let Some(forwards) = &self.port_forwards {
12561268 args.extend(forwards.iter().map(|pf| {
12571269 let local_host = match &pf.local_host {
crates/settings/src/settings_content.rs+3−0
@@ -930,6 +930,9 @@ pub struct SshConnection { · 929 unmodified lines
930930 pub upload_binary_over_ssh: Option<bool>,
931931
932932 pub port_forwards: Option<Vec<SshPortForwardOption>>,
933+ /// Timeout in seconds for SSH connection and downloading the remote server binary.
934+ /// Defaults to 10 seconds if not specified.
935+ pub connection_timeout: Option<u16>,
933936 }
934937
935938 #[derive(Clone, Default, Serialize, Deserialize, PartialEq, JsonSchema, MergeFrom, Debug)]
crates/zed/src/zed/open_listener.rs+1−0
@@ -686,6 +686,7 @@ mod tests { · 685 unmodified lines
686686 port_forwards: None,
687687 nickname: None,
688688 upload_binary_over_ssh: false,
689+ connection_timeout: None,
689690 })
690691 );
691692 assert_eq!(request.open_paths, vec!["/"]);