@@ -255,7 +255,7 @@ class CoderCLIManager(
255255val startBlock= " # --- START CODER JETBRAINS$host "
256256val endBlock= " # --- END CODER JETBRAINS$host "
257257val isRemoving= workspaceNames.isEmpty()
258- val proxyArgs =
258+ val baseArgs =
259259 listOfNotNull(
260260 escape(localBinaryPath.toString()),
261261" --global-config" ,
@@ -265,8 +265,9 @@ class CoderCLIManager(
265265" ssh" ,
266266" --stdio" ,
267267if (settings.disableAutostart&& feats.disableAutostart)" --disable-autostart" else null ,
268- if (feats.reportWorkspaceUsage)" --usage-app=jetbrains" else null ,
269268 )
269+ val proxyArgs= baseArgs+ listOfNotNull(if (feats.reportWorkspaceUsage)" --usage-app=jetbrains" else null )
270+ val backgroundProxyArgs= baseArgs+ listOfNotNull(if (feats.reportWorkspaceUsage)" --usage-app=disable" else null )
270271val extraConfig=
271272if (settings.sshConfigOptions.isNotBlank()) {
272273" \n " + settings.sshConfigOptions.prependIndent(" " )
@@ -289,7 +290,19 @@ class CoderCLIManager(
289290 SetEnv CODER_SSH_SESSION_TYPE=JetBrains
290291""" .trimIndent()
291292 .plus(extraConfig)
292- .replace(" \n " ,System .lineSeparator())
293+ .plus(" \n " )
294+ .plus(
295+ """
296+ Host${getBackgroundHostName(deploymentURL, it)}
297+ ProxyCommand${backgroundProxyArgs.joinToString(" " )} $it
298+ ConnectTimeout 0
299+ StrictHostKeyChecking no
300+ UserKnownHostsFile /dev/null
301+ LogLevel ERROR
302+ SetEnv CODER_SSH_SESSION_TYPE=JetBrains
303+ """ .trimIndent()
304+ .plus(extraConfig)
305+ ).replace(" \n " ,System .lineSeparator())
293306 },
294307 )
295308
@@ -465,5 +478,20 @@ class CoderCLIManager(
465478 ):String {
466479return " coder-jetbrains--$workspaceName --${url.safeHost()} "
467480 }
481+
482+ @JvmStatic
483+ fun getBackgroundHostName (
484+ url : URL ,
485+ workspaceName : String ,
486+ ):String {
487+ return getHostName(url, workspaceName)+ " --bg"
488+ }
489+
490+ @JvmStatic
491+ fun getBackgroundHostName (
492+ hostname : String ,
493+ ):String {
494+ return hostname+ " --bg"
495+ }
468496 }
469497}