After OpenSSH installs, perform some additional configuration steps.
Ensure that the OpenSSH folder is included on the system path environment variable:
C:\Windows\System32\OpenSSH\
if installed as the Windows optional feature
C:\Program Files\OpenSSH\
if installed via the OpenSSH download
Set the two services to start automatically:
# PowerShell Admin
# Config services sshd and ssh-agent
# for start automatic when logon
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic
If you installed OpenSSH with the optional feature, then Windows creates a new firewall rule to allow inbound access of SSH over port 22. If you installed OpenSSH from the download, then create the firewall rule with this command:
# PowerShell Admin
# Add FireWall Rules for OpenSSH Server
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' `
-Enabled True -Direction Inbound -Protocol TCP `
-Action Allow -LocalPort 22
Start the sshd service to generate the SSH keys:
# PowerShell Admin
Start-Service sshd
The SSH keys and configuration file reside in C:\ProgramData\ssh
, which is a hidden folder. The default shell used by SSH is the Windows command shell. This needs to change to PowerShell:
# PowerShell Admin
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force
Now, when you connect to the system over SSH, PowerShell Core will start and will be the default shell. You can also make the default shell Windows PowerShell if desired.
There's a bug in OpenSSH on Windows. It doesn't work with paths with a space, such as the path to the PowerShell Core executable! The workaround is to create a symbolic link that creates a path that OpenSSH can use:
# PowerShell Admin
New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'
In the sshd_config file, un-comment the following lines:
PubkeyAuthentication yes
PasswordAuthentication yes
Add this line before other subsystem lines:
Subsystem powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile
This tells OpenSSH to run PowerShell Core.
Comment out the line:
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
After saving the changes to the sshd_config file, restart the services:
# PowerShell Admin
Restart-Service sshd
Start-Service ssh-agent
You need to restart the sshd service after any change to the config file.