diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 9c59b300d..a9d0da4ff 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -1028,9 +1028,9 @@ in
         time = "2023-05-13T14:34:21+00:00";
         condition = config.programs.ssh.enable;
         message = ''
-          The module 'programs.ssh' now installs an SSH client. The installed
+          The module 'programs.ssh' can now install an SSH client. The installed
           client is controlled by the 'programs.ssh.package` option, which
-          defaults to 'pkgs.openssh'.
+          defaults to 'null'.
         '';
       }
       {
diff --git a/modules/programs/ssh.nix b/modules/programs/ssh.nix
index 7469cac53..0d616bdfd 100644
--- a/modules/programs/ssh.nix
+++ b/modules/programs/ssh.nix
@@ -361,7 +361,11 @@ in
   options.programs.ssh = {
     enable = mkEnableOption "SSH client configuration";
 
-    package = mkPackageOption pkgs "openssh" { };
+    package = mkPackageOption pkgs "openssh" {
+      nullable = true;
+      default = null;
+      extraDescription = "By default, the client provided by your system is used.";
+    };
 
     forwardAgent = mkOption {
       default = false;
@@ -527,7 +531,7 @@ in
       }
     ];
 
-    home.packages = [ cfg.package ];
+    home.packages = optional (cfg.package != null) cfg.package;
 
     home.file.".ssh/config".text =
       let
diff --git a/tests/modules/programs/ssh/default-config.nix b/tests/modules/programs/ssh/default-config.nix
index c059d021f..6d7e5508a 100644
--- a/tests/modules/programs/ssh/default-config.nix
+++ b/tests/modules/programs/ssh/default-config.nix
@@ -6,8 +6,6 @@ with lib;
   config = {
     programs.ssh = { enable = true; };
 
-    test.stubs.openssh = { };
-
     home.file.assertions.text = builtins.toJSON
       (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
diff --git a/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
index 1be55aef0..e841b5bcd 100644
--- a/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
@@ -17,8 +17,6 @@ with lib;
       };
     };
 
-    test.stubs.openssh = { };
-
     test.asserts.assertions.expected = [ "Forwarded paths cannot have ports." ];
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix b/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
index 8a371402f..d0c3a7322 100644
--- a/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
@@ -27,8 +27,6 @@ with lib;
     home.file.result.text = builtins.toJSON
       (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
-    test.stubs.openssh = { };
-
     nmt.script = ''
       assertFileExists home-files/.ssh/config
       assertFileContent \
diff --git a/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
index 2b03b56e0..e7ac454e8 100644
--- a/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
@@ -21,8 +21,6 @@ with lib;
       };
     };
 
-    test.stubs.openssh = { };
-
     test.asserts.assertions.expected = [ "Forwarded paths cannot have ports." ];
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
index aa72e3527..890459c8a 100644
--- a/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
@@ -21,8 +21,6 @@ with lib;
       };
     };
 
-    test.stubs.openssh = { };
-
     test.asserts.assertions.expected = [ "Forwarded paths cannot have ports." ];
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
index e4e83390f..ece7d7953 100644
--- a/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
@@ -21,8 +21,6 @@ with lib;
       };
     };
 
-    test.stubs.openssh = { };
-
     test.asserts.assertions.expected = [ "Forwarded paths cannot have ports." ];
   };
 }
diff --git a/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix b/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
index e4332346b..b1228f4ef 100644
--- a/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
+++ b/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
@@ -21,8 +21,6 @@ with lib;
       };
     };
 
-    test.stubs.openssh = { };
-
     test.asserts.assertions.expected = [ "Forwarded paths cannot have ports." ];
   };
 }
diff --git a/tests/modules/programs/ssh/includes.nix b/tests/modules/programs/ssh/includes.nix
index def9cf96b..12e2c6df8 100644
--- a/tests/modules/programs/ssh/includes.nix
+++ b/tests/modules/programs/ssh/includes.nix
@@ -7,8 +7,6 @@
       includes = [ "config.d/*" "other/dir" ];
     };
 
-    test.stubs.openssh = { };
-
     nmt.script = ''
       assertFileExists home-files/.ssh/config
       assertFileContains home-files/.ssh/config "Include config.d/* other/dir"
diff --git a/tests/modules/programs/ssh/match-blocks-attrs.nix b/tests/modules/programs/ssh/match-blocks-attrs.nix
index 1b32943a3..d8584e3a0 100644
--- a/tests/modules/programs/ssh/match-blocks-attrs.nix
+++ b/tests/modules/programs/ssh/match-blocks-attrs.nix
@@ -51,8 +51,6 @@ with lib;
     home.file.assertions.text = builtins.toJSON
       (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
-    test.stubs.openssh = { };
-
     nmt.script = ''
       assertFileExists home-files/.ssh/config
       assertFileContent \
diff --git a/tests/modules/programs/ssh/match-blocks-match-and-hosts.nix b/tests/modules/programs/ssh/match-blocks-match-and-hosts.nix
index 72ae72ea3..aa1e40d05 100644
--- a/tests/modules/programs/ssh/match-blocks-match-and-hosts.nix
+++ b/tests/modules/programs/ssh/match-blocks-match-and-hosts.nix
@@ -21,8 +21,6 @@ with lib;
     home.file.assertions.text = builtins.toJSON
       (map (a: a.message) (filter (a: !a.assertion) config.assertions));
 
-    test.stubs.openssh = { };
-
     nmt.script = ''
       assertFileExists home-files/.ssh/config
       assertFileContent \