diff --git a/config/task-runner.php b/config/task-runner.php
index dce6a31..9e6ccf9 100644
--- a/config/task-runner.php
+++ b/config/task-runner.php
@@ -31,4 +31,7 @@
         'enabled' => env('TASK_RUNNER_PERSISTENT_FAKE', false),
         'storage_root' => storage_path('framework/testing/task-runner'),
     ],
+
+    // The connection timeout for connecting to a remote server in seconds.
+    'connection_timeout' => 10,
 ];
diff --git a/src/RemoteProcessRunner.php b/src/RemoteProcessRunner.php
index 9b50166..6699348 100644
--- a/src/RemoteProcessRunner.php
+++ b/src/RemoteProcessRunner.php
@@ -14,7 +14,8 @@ class RemoteProcessRunner
 
     public function __construct(
         private Connection $connection,
-        private ProcessRunner $processRunner
+        private ProcessRunner $processRunner,
+        private int $connectionTimeout = 10,
     ) {
     }
 
@@ -46,7 +47,7 @@ public function verifyScriptDirectoryExists(): self
     {
         $output = $this->run(
             script: 'mkdir -p '.$this->connection->scriptPath,
-            timeout: 10
+            timeout: $this->connectionTimeout,
         );
 
         if ($output->isTimeout() || $output->getExitCode() !== 0) {
@@ -96,7 +97,7 @@ public function runUploadedScriptInBackground(string $script, string $output, in
             timeout: $timeout,
         );
 
-        return $this->run($script, 10);
+        return $this->run($script, $this->connectionTimeout);
     }
 
     /**
@@ -141,6 +142,7 @@ private function cleanupOutput(ProcessOutput $processOutput): ProcessOutput
      *
      * @param  string  $filename
      * @param  string  $contents
+     * @param  int  $timeout
      */
     public function upload($filename, $contents): self
     {
@@ -156,7 +158,7 @@ public function upload($filename, $contents): self
         ]);
 
         $output = $this->processRunner->run(
-            FacadesProcess::command($command)->timeout(10)
+            FacadesProcess::command($command)->timeout($this->connectionTimeout)
         );
 
         if ($output->isTimeout() || $output->getExitCode() !== 0) {
diff --git a/src/TaskDispatcher.php b/src/TaskDispatcher.php
index 2858654..fd38ae0 100644
--- a/src/TaskDispatcher.php
+++ b/src/TaskDispatcher.php
@@ -60,7 +60,7 @@ public function run(PendingTask $pendingTask): ?ProcessOutput
     /**
      * Runs the given task in the background.
      *
-     * @return void
+     * @return ProcessOutput
      */
     private function runInBackground(PendingTask $pendingTask)
     {
@@ -71,7 +71,7 @@ private function runInBackground(PendingTask $pendingTask)
         );
 
         return $this->processRunner->run(
-            FacadesProcess::command($command)->timeout(10)
+            FacadesProcess::command($command)->timeout(config('task-runner.connection_timeout', 10))
         );
     }
 
@@ -80,10 +80,10 @@ private function runInBackground(PendingTask $pendingTask)
      */
     private function runOnConnection(PendingTask $pendingTask): ProcessOutput
     {
-        /** @var RemoteProcessRunner */
+        /** @var RemoteProcessRunner $runner */
         $runner = app()->makeWith(
             RemoteProcessRunner::class,
-            ['connection' => $pendingTask->getConnection(), 'processRunner' => $this->processRunner]
+            ['connection' => $pendingTask->getConnection(), 'processRunner' => $this->processRunner, 'connectionTimeout' => config('task-runner.connection_timeout', 10)]
         );
 
         if ($outputCallbable = $pendingTask->getOnOutput()) {