Shrink the main windows partition by at least 100MB at the start and at least 200MB at the end
Grow the efi partition by the at least 100 MB you freed at the beginning, depending on your partition layout you might have to move the recovery partition
Now reboot into a Linux installer from USB, here I'll describe the settings for Ubuntu, but I've also successfully done it with Arch, it should work with any Linux distribution (with UEFI support)
Start the Ubuntu installer and follow it like normal, until you get to the installation type, here choose "Something else" to enter a custom partition layout
The efi partition should be automatically selected to be used as such, if it isn't select it manually
Create a new partition on the SSD in the place freed after the Windows partition, format it with something like Ext2/3 and select its mount point as /boot
Create a new partition on the SD Card (if you want to you could also encrypt it with LUKS) and select its mount point as /
Save From : (4) Ubuntu 18.10 installed on a microSD: worked on a 4... how do I boot on a 5? : SurfaceLinux
Content
Here's what I did on my SP2017:
Disable Secure Boot in the BIOS
Under Windows start the Disk Management tool
Shrink the main windows partition by at least 100MB at the start and at least 200MB at the end
Grow the efi partition by the at least 100 MB you freed at the beginning, depending on your partition layout you might have to move the recovery partition
Now reboot into a Linux installer from USB, here I'll describe the settings for Ubuntu, but I've also successfully done it with Arch, it should work with any Linux distribution (with UEFI support)
Start the Ubuntu installer and follow it like normal, until you get to the installation type, here choose "Something else" to enter a custom partition layout
The efi partition should be automatically selected to be used as such, if it isn't select it manually
Create a new partition on the SSD in the place freed after the Windows partition, format it with something like Ext2/3 and select its mount point as /boot
Create a new partition on the SD Card (if you want to you could also encrypt it with LUKS) and select its mount point as /
Note