### Godot version

v4.0.beta.custom_build [d1e5903c6]

### System information

Arch Linux kernel 6.1.7-arch1-1 x86_64 OpenSSH 9.1p1-3

### Issue description

When using SSH remote deploy, if the extra args field is empty (the default) the ssh command is not executed with success because a single space is inserted in place of the extra args.

```
Creating temporary directory...
Executing: ssh -p 22  davi@192.168.1.50 mktemp -d
Exit code: 255, Output: ssh: Could not resolve hostname : Name or service not known

ssh: Could not resolve hostname : Name or service not known
```

If any valid argument is passed, the command is executed successfully, in the example below I duplicated the `-p 22`, which is ignored, to show that it is not a problem of the hostname passed.

```
Executing: ssh -p 22 -p 22 davi@192.168.1.50 mktemp -d
Exit code: 0, Output: /tmp/tmp.DwFObXBL2s
```

This is infuriating for when you have non-interactive authentication configured in ssh-agent and just the hostname is needed for the connection.
This occurs for both SSH and SCP.

### Steps to reproduce

1. Enable a project to deploy with ssh
2. Fill only the hostname
3. Try to deploy
4. See the error on the console

### Minimal reproduction project

N/A
} else {
				bose("notarytool (" + p_path + "):\n" + str);
				int next_nl = str.find("\n", rq_offset);
				String request_uuid = (next_nl == -1) ? str.substr(rq_offset + 4, -1) : str.substr(rq_offset + 4, next_nl - rq_offset - 4);
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), vformat(TTR("Notarization request UUID: \"%s\""), request_uuid));
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), TTR("The notarization process generally takes less than an hour."));
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), "\t" + TTR("You can check progress manually by opening a Terminal and running the following command:"));
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), "\t\t\"xcrun notarytool log <request uuid> --issuer <api uuid> --key-id <api key id> --key <api key path>\" or");
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), "\t\t\"xcrun notarytool log <request uuid> --apple-id <your email> --password <app-specific pwd>>\"");
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), "\t" + TTR("Run the following command to staple the notarization ticket to the exported application (optional):"));
				add_message(EXPORT_MESSAGE_INFO, TTR("Notarization"), "\t\t\"xcrun stapler staple <app path>\"");
			}
		} break;
		case 3: { 
			bose("using altool notarization...");
			if (!FileAccess::exists("/usr/bin/xcrun") && !FileAccess::exists("/bin/xcrun")) {
				add_message(EXPORT_MESSAGE_ERROR, TTR("Notarization"), TTR("Xcode command line tools are not installed."));
				return Error::FAILED;
			}
			List<String> args;
			args.push_back("altool");
			args.push_back("--notarize-app");
			args.push_back("--primary-bundle-id");
			args.push_back(p_preset->get("application/bundle_identifier"));
			if (p_preset->get("notarization/apple_id_name") == "" && p_preset->get("notarization/api_uuid") == "") {
				add_message(EXPORT_MESSAGE_ERROR, TTR("Notarization"), TTR("Neither Apple ID name nor App Store Connect issuer ID name not specified."));
				return Error::FAILED;
			}
			if (p_preset->get("notarization/apple_id_name") != "" && p_preset->get("notarization/api_uuid") != "") {
				add_message(EXPORT_MESSAGE_ERROR, TTR("Notarization"), TTR("Both Apple ID name and App Store Connect issuer ID name are specified, only one should be set at the same time."));