<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Siddharth Magesh</title>
    <description>The latest articles on DEV Community by Siddharth Magesh (@siddharth_magesh_e12b8505).</description>
    <link>https://dev.to/siddharth_magesh_e12b8505</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3523412%2F91dc4784-4b24-4af9-a0ff-ea72757991f8.png</url>
      <title>DEV Community: Siddharth Magesh</title>
      <link>https://dev.to/siddharth_magesh_e12b8505</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/siddharth_magesh_e12b8505"/>
    <language>en</language>
    <item>
      <title>Fixing Extremely Slow Debian Boot on a Windows Dual-Boot System</title>
      <dc:creator>Siddharth Magesh</dc:creator>
      <pubDate>Fri, 06 Feb 2026 05:12:57 +0000</pubDate>
      <link>https://dev.to/siddharth_magesh_e12b8505/fixing-extremely-slow-debian-boot-on-a-windows-dual-boot-system-4g8h</link>
      <guid>https://dev.to/siddharth_magesh_e12b8505/fixing-extremely-slow-debian-boot-on-a-windows-dual-boot-system-4g8h</guid>
      <description>&lt;p&gt;I dual-booted my laptop with &lt;strong&gt;Windows and Debian&lt;/strong&gt;, and while Windows booted normally, Debian consistently took &lt;strong&gt;2–3 minutes&lt;/strong&gt; to reach the desktop. The boot process showed multiple “checking” messages and long pauses.&lt;/p&gt;

&lt;p&gt;This post documents the &lt;strong&gt;exact debugging steps&lt;/strong&gt; I followed and the &lt;strong&gt;single configuration change&lt;/strong&gt; that fixed the issue permanently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem Overview
&lt;/h2&gt;

&lt;p&gt;Debian boot time was abnormally long:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Startup finished in 7s (firmware)
+ 5s (loader)
+ 4s (kernel)
+ 2min 41s (userspace)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The kernel loaded quickly. The delay was entirely in &lt;strong&gt;userspace&lt;/strong&gt;, meaning system services were blocked waiting for something.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Measure the boot process
&lt;/h2&gt;

&lt;p&gt;The first step was to identify where the time was being spent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemd-analyze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This confirmed that userspace was responsible for the delay.&lt;/p&gt;

&lt;p&gt;Next, I inspected which services were slow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemd-analyze blame
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Several services appeared to take ~30 seconds, but this output is misleading because many services start in parallel.&lt;/p&gt;

&lt;p&gt;To identify the real blocker, I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemd-analyze critical-chain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Identify the blocking dependency
&lt;/h2&gt;

&lt;p&gt;The critical chain showed this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev-disk-by-uuid-1CEE-9C07.device @ 1min+
└─ systemd-fsck@...
└─ boot-efi.mount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This revealed that &lt;strong&gt;everything was waiting on a disk device&lt;/strong&gt;, specifically the one used for &lt;code&gt;/boot/efi&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Identify the device
&lt;/h2&gt;

&lt;p&gt;To find out what this UUID belonged to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relevant output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvme0n1p7  vfat  UUID=1CEE-9C07  /boot/efi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The blocking device was the &lt;strong&gt;EFI system partition&lt;/strong&gt;, formatted as &lt;strong&gt;VFAT&lt;/strong&gt; and &lt;strong&gt;shared with Windows&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Root Cause
&lt;/h2&gt;

&lt;p&gt;On dual-boot systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows frequently modifies the EFI partition&lt;/li&gt;
&lt;li&gt;VFAT devices may take time to settle after firmware handoff&lt;/li&gt;
&lt;li&gt;systemd treats &lt;code&gt;/boot/efi&lt;/code&gt; as a critical mount&lt;/li&gt;
&lt;li&gt;The default timeout is ~90 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because &lt;code&gt;/boot/efi&lt;/code&gt; mounts very early, &lt;strong&gt;all other services were blocked&lt;/strong&gt; until it became available.&lt;/p&gt;

&lt;p&gt;This is not a Debian bug. It is a common dual-boot edge case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Apply the fix safely
&lt;/h2&gt;

&lt;p&gt;The goal is &lt;strong&gt;not&lt;/strong&gt; to remove &lt;code&gt;/boot/efi&lt;/code&gt;, but to prevent it from blocking the entire boot process.&lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Original entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UUID=1CEE-9C07  /boot/efi  vfat  umask=0077  0  1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Updated entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UUID=1CEE-9C07  /boot/efi  vfat  umask=0077,nofail,x-systemd.device-timeout=5s  0  1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What this change does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;nofail&lt;/code&gt;
Allows the system to continue booting even if EFI is slow&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x-systemd.device-timeout=5s&lt;/code&gt;
Limits how long systemd waits for the EFI device&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The EFI partition still mounts normally, but it no longer blocks the boot.&lt;/p&gt;




&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;After rebooting directly into Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Startup finished in 7.0s (firmware)
+ 4.7s (loader)
+ 4.2s (kernel)
+ 8.8s (userspace)
= ~25 seconds total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The issue was completely resolved.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always start with &lt;code&gt;systemd-analyze&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;critical-chain&lt;/code&gt; to find the real blocker&lt;/li&gt;
&lt;li&gt;Dual-boot EFI partitions are a common source of boot delays&lt;/li&gt;
&lt;li&gt;One targeted &lt;code&gt;fstab&lt;/code&gt; change can fix multi-minute boot times&lt;/li&gt;
&lt;li&gt;Avoid disabling fsck or core services blindly&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This was not a performance issue, a kernel issue, or a broken install.&lt;br&gt;
It was systemd correctly waiting for a shared EFI partition for too long.&lt;/p&gt;

&lt;p&gt;Understanding &lt;strong&gt;what the system is waiting for&lt;/strong&gt; is more effective than disabling random services.&lt;/p&gt;

&lt;p&gt;If you are dual-booting Linux and Windows and experiencing long boot times, inspect &lt;code&gt;/boot/efi&lt;/code&gt; first.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>debian</category>
      <category>dualboot</category>
      <category>systems</category>
    </item>
    <item>
      <title>Secure Remote Access to a Windows Machine from Debian Using SSH and Tailscale</title>
      <dc:creator>Siddharth Magesh</dc:creator>
      <pubDate>Tue, 13 Jan 2026 09:48:49 +0000</pubDate>
      <link>https://dev.to/siddharth_magesh_e12b8505/secure-remote-access-to-a-windows-machine-from-debian-using-ssh-and-tailscale-4og</link>
      <guid>https://dev.to/siddharth_magesh_e12b8505/secure-remote-access-to-a-windows-machine-from-debian-using-ssh-and-tailscale-4og</guid>
      <description>&lt;h2&gt;
  
  
  Introduction (Motive)
&lt;/h2&gt;

&lt;p&gt;I wanted a reliable way to remotely access my Windows machine (with a dedicated GPU) from a Debian laptop, from anywhere in the world, without exposing ports, dealing with dynamic IPs, or relying on fragile tunneling tools.&lt;/p&gt;

&lt;p&gt;The goal was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure remote terminal access&lt;/li&gt;
&lt;li&gt;Works across different networks&lt;/li&gt;
&lt;li&gt;No router port forwarding&lt;/li&gt;
&lt;li&gt;Stable and production-grade&lt;/li&gt;
&lt;li&gt;Compatible with VS Code Remote development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This post documents the &lt;strong&gt;exact steps&lt;/strong&gt;, &lt;strong&gt;pitfalls&lt;/strong&gt;, and &lt;strong&gt;final configuration&lt;/strong&gt; that worked.&lt;/p&gt;




&lt;h2&gt;
  
  
  System Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remote machine&lt;/strong&gt;: Windows 11 (Home/Pro), GPU-enabled&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client machine&lt;/strong&gt;: Debian Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote access&lt;/strong&gt;: OpenSSH&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking&lt;/strong&gt;: Tailscale (WireGuard-based mesh VPN)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor&lt;/strong&gt;: VS Code with Remote SSH extension&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  High-Level Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Debian Laptop
   |
   |  (Encrypted Tailscale tunnel)
   |
Windows PC (sshd running)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tailscale provides a private network (&lt;code&gt;100.x.x.x&lt;/code&gt;) between devices. SSH runs &lt;strong&gt;inside&lt;/strong&gt; this network, so nothing is exposed to the public internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Enable OpenSSH Server on Windows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Install OpenSSH Server (manual MSI method)
&lt;/h3&gt;

&lt;p&gt;On recent Windows builds, the optional feature install may hang. The reliable approach is to install OpenSSH manually.&lt;/p&gt;

&lt;p&gt;Download the &lt;strong&gt;Win64 OpenSSH MSI&lt;/strong&gt; from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/PowerShell/Win32-OpenSSH/releases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install it, then verify binaries exist at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Program Files\OpenSSH\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  1.2 Create and start the sshd service
&lt;/h3&gt;

&lt;p&gt;Open &lt;strong&gt;PowerShell as Administrator&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;sc.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;binPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files\OpenSSH\sshd.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;auto&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;sc.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenSSH SSH Server"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Start-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Status : Running
StartType : Automatic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  1.3 Allow SSH through Windows Firewall
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-NetFirewallRule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenSSH Server"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Direction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Inbound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-LocalPort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Allow&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Configure SSH Authentication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Generate SSH key on Debian
&lt;/h3&gt;

&lt;p&gt;On Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Public key location:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2.2 Add public key to Windows
&lt;/h3&gt;

&lt;p&gt;On Windows, create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\JohnDoe\.ssh\authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the &lt;strong&gt;entire&lt;/strong&gt; public key line into this file.&lt;/p&gt;




&lt;h3&gt;
  
  
  2.3 Fix permissions (important)
&lt;/h3&gt;

&lt;p&gt;Run in &lt;strong&gt;PowerShell (Admin)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh" /inheritance:r'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh" /grant JohnDoe:(F)'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh\authorized_keys" /inheritance:r'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh\authorized_keys" /grant JohnDoe:(R)'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Incorrect permissions will cause SSH login failures.&lt;/p&gt;




&lt;h3&gt;
  
  
  2.4 If you don’t have a Windows password
&lt;/h3&gt;

&lt;p&gt;SSH requires a Windows account password.&lt;/p&gt;

&lt;p&gt;Set one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JohnDoe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Install Tailscale on Windows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Install via MSI (recommended)
&lt;/h3&gt;

&lt;p&gt;Download:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://pkgs.tailscale.com/stable/tailscale-setup-&amp;lt;version&amp;gt;-amd64.msi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install normally.&lt;/p&gt;

&lt;p&gt;Verify service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Tailscale&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3.2 Login to Tailscale
&lt;/h3&gt;

&lt;p&gt;Use the system tray icon to log in.&lt;/p&gt;

&lt;p&gt;Check status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files\Tailscale\tailscale.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100.xxx.xxx.xxx  windows-machine-name  windows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Install Tailscale on Debian
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://tailscale.com/install.sh | sh
&lt;span class="nb"&gt;sudo &lt;/span&gt;tailscale up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authenticate using the &lt;strong&gt;same account&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tailscale status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both machines should appear.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: SSH Over Tailscale (Global Access)
&lt;/h2&gt;

&lt;p&gt;From Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh JohnDoe@100.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or using hostname:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh JohnDoe@windows-machine-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different Wi-Fi&lt;/li&gt;
&lt;li&gt;Mobile hotspot&lt;/li&gt;
&lt;li&gt;University or office networks&lt;/li&gt;
&lt;li&gt;Anywhere in the world&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No port forwarding required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: VS Code Remote SSH (Optional but Recommended)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Install extension on Debian
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote - SSH (ms-vscode-remote.remote-ssh)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6.2 Add SSH host
&lt;/h3&gt;

&lt;p&gt;Command Palette:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote-SSH: Add New SSH Host
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh JohnDoe@100.xxx.xxx.xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host windows
    HostName 100.xxx.xxx.xxx
    User JohnDoe
    IdentityFile ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6.3 Connect and open a specific folder
&lt;/h3&gt;

&lt;p&gt;Command Palette:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote-SSH: Connect to Host
Remote-SSH: Open Folder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Windows path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D:\projects\my_project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;VS Code now runs fully remote on Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Pitfalls and Fixes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SSH asks for password repeatedly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;code&gt;authorized_keys&lt;/code&gt; permissions&lt;/li&gt;
&lt;li&gt;Ensure key is one single line&lt;/li&gt;
&lt;li&gt;Verify correct Windows username&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  VS Code &lt;code&gt;code .&lt;/code&gt; doesn’t open over SSH
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SSH sessions are headless&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;VS Code Remote SSH&lt;/strong&gt;, not GUI commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SSH doesn’t work after reboot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You must &lt;strong&gt;log in once&lt;/strong&gt; after boot&lt;/li&gt;
&lt;li&gt;Sleep/hibernate disables networking&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Power and Boot Behavior (Important)
&lt;/h2&gt;

&lt;p&gt;This setup works if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows is powered on&lt;/li&gt;
&lt;li&gt;You have logged in after boot&lt;/li&gt;
&lt;li&gt;Tailscale and sshd services are running&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; work if the system is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shut down&lt;/li&gt;
&lt;li&gt;Sleeping&lt;/li&gt;
&lt;li&gt;Stuck at login screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Auto-login and Wake-on-LAN can be added later if needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With OpenSSH and Tailscale, it’s possible to build a secure, production-grade remote access setup without exposing ports or relying on third-party tunneling services.&lt;/p&gt;

&lt;p&gt;This approach is stable, scalable, and ideal for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote development&lt;/li&gt;
&lt;li&gt;GPU workloads&lt;/li&gt;
&lt;li&gt;Cross-platform workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I plan to extend this setup further with stricter SSH policies and automated boot-time connectivity.&lt;/p&gt;




</description>
      <category>ssh</category>
      <category>linux</category>
      <category>tailscale</category>
      <category>remoteconnection</category>
    </item>
    <item>
      <title>Remote SSH Access to Windows from Debian: Complete Setup and Fixes</title>
      <dc:creator>Siddharth Magesh</dc:creator>
      <pubDate>Fri, 12 Dec 2025 06:18:36 +0000</pubDate>
      <link>https://dev.to/siddharth_magesh_e12b8505/remote-ssh-access-to-windows-from-debian-complete-setup-and-fixes-3e5d</link>
      <guid>https://dev.to/siddharth_magesh_e12b8505/remote-ssh-access-to-windows-from-debian-complete-setup-and-fixes-3e5d</guid>
      <description>&lt;h1&gt;
  
  
  Remote SSH Access to a Windows Machine from Debian: Full Setup, Fixes, and Lessons Learned
&lt;/h1&gt;

&lt;p&gt;I wanted to remotely access my Windows laptop (with GPU) from my Debian machine using SSH. However, Windows 11 (especially Insider/Canary builds) often breaks or removes the built-in OpenSSH Server capability. This article documents every step needed to get SSH working correctly: installation, service creation, firewall rules, password setup, configuration fixes, and overcoming common errors.&lt;/p&gt;

&lt;p&gt;This guide uses &lt;strong&gt;JohnDoe&lt;/strong&gt; as the Windows username. Replace it with your own.&lt;/p&gt;




&lt;h2&gt;
  
  
  System Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Client machine: Debian Linux&lt;/li&gt;
&lt;li&gt;Remote machine: Windows 11 (Canary build)&lt;/li&gt;
&lt;li&gt;Goal: SSH from Debian into Windows using password authentication&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Problem: OpenSSH Server Optional Feature Fails to Install
&lt;/h2&gt;

&lt;p&gt;On Windows Canary builds, installing OpenSSH Server via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Add-WindowsCapability&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Online&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;OpenSSH.Server~~~~0.0.1.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;often hangs indefinitely.&lt;br&gt;
To avoid this issue, install OpenSSH manually.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Manual Installation of OpenSSH (MSI Method)
&lt;/h2&gt;

&lt;p&gt;Download the official MSI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenSSH-Win64-v10.0.0.0.msi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source: &lt;a href="https://github.com/PowerShell/Win32-OpenSSH/releases/latest" rel="noopener noreferrer"&gt;https://github.com/PowerShell/Win32-OpenSSH/releases/latest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install it normally. After installation, binaries are located in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Program Files\OpenSSH\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Create the SSH Service Manually
&lt;/h2&gt;

&lt;p&gt;On some Windows builds, the MSI installs binaries but does not register the sshd service.&lt;br&gt;
Create it using &lt;code&gt;sc.exe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;PowerShell as Administrator&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;sc.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;binPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files\OpenSSH\sshd.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;auto&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;sc.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenSSH SSH Server"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Start-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify service state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify startup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-CimInstance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ClassName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Win32_Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Name='sshd'"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;StartMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name   StartMode  State
sshd   Auto       Running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Allow SSH Through Windows Firewall
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-NetFirewallRule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpenSSH Server"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Direction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Inbound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LocalPort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Allow&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Determine Windows Local IP Address
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ipconfig&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the IPv4 address of the active adapter, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IPv4 Address: 192.168.68.103
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this IP when connecting from Debian.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Set a Password for the Windows User (Required for SSH)
&lt;/h2&gt;

&lt;p&gt;If your account only uses PIN/face/fingerprint, SSH cannot authenticate.&lt;br&gt;
A real password must be set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;JohnDoe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter a password when prompted.&lt;br&gt;
This is the password that SSH will use.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. SSH Configuration Fixes (Optional but Recommended)
&lt;/h2&gt;

&lt;p&gt;Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;notepad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files\OpenSSH\sshd_config"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ensure the following lines exist and are not commented:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this block exists, comment it out to avoid override issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Match Group administrators
#    AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Restart-Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sshd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. (Optional) Add SSH Key Authentication
&lt;/h2&gt;

&lt;p&gt;On Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"debian-client"&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.ssh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;notepad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.ssh\authorized_keys&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the key and save.&lt;/p&gt;

&lt;p&gt;Set valid ACL permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh" /inheritance:r'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh" /grant JohnDoe:(F)'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh\authorized_keys" /inheritance:r'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'icacls "C:\Users\JohnDoe\.ssh\authorized_keys" /grant JohnDoe:(R)'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. SSH From Debian (Same Local Network Only)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh JohnDoe@192.168.68.103
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When prompted for host authenticity, enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then provide the password created via &lt;code&gt;net user&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Notes and Hurdles Encountered
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OpenSSH capability installation hanging
&lt;/h3&gt;

&lt;p&gt;The built-in feature installer may freeze on Canary builds.&lt;br&gt;
The MSI avoids this entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service missing after reboot
&lt;/h3&gt;

&lt;p&gt;If the service shows “marked for deletion”, reboot and recreate using &lt;code&gt;sc.exe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Important Limitation: Same-Network Requirement&lt;/p&gt;

&lt;p&gt;The SSH setup described in this article works &lt;strong&gt;only when both the Debian and Windows machines are connected to the same local network&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is because the connection uses a private IPv4 address (for example &lt;code&gt;192.168.x.x&lt;/code&gt;), which is not routable over the public internet. When the machines are on different networks, the SSH client will not be able to reach the Windows host due to NAT and firewall isolation.&lt;/p&gt;

&lt;p&gt;To enable remote access across different networks, additional networking solutions such as VPNs, tunneling tools, or overlay networks would be required. These approaches are outside the scope of this article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication failures
&lt;/h3&gt;

&lt;p&gt;If SSH keeps asking for a password, ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Windows user has a real password&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PasswordAuthentication yes&lt;/code&gt; is set&lt;/li&gt;
&lt;li&gt;sshd is restarted&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Public key not accepted
&lt;/h3&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file is named &lt;code&gt;authorized_keys&lt;/code&gt; (no extension)&lt;/li&gt;
&lt;li&gt;ACL permissions are correct&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AuthorizedKeysFile&lt;/code&gt; path matches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, All my accounts on the browser were logged out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SSH access from Linux to Windows is entirely possible, even on unstable Windows builds, but may require manual installation steps and fixes. Following the process above provides a stable, repeatable configuration with accurate commands and known troubleshooting solutions.&lt;/p&gt;

&lt;p&gt;This article may be updated later to include additional remote access enhancements such as Parsec, TeamViewer, RustDesk, and Wake-on-LAN.&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>windows</category>
      <category>linux</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
