13

Windows 10 recently added OpenSSH as an optional Windows feature. I've found the config file C:\Windows\System32\OpenSSH\sshd_config and gave myself rights to modify it.

Here's the file I have:

#   $OpenBSD: sshd_config,v 1.84 2011/05/23 03:30:07 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# The default requires explicit activation of protocol 1
#Protocol 2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#RSAAuthentication yes
#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing, 
# and session processing. If this is enabled, PAM authentication will 
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    sftp-server.exe

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   ForceCommand cvs server
# PubkeyAcceptedKeyTypes ssh-ed25519*

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

The only non-default entries are the bottom 3 lines that should disable password authentication. After I change the file I go to services and restart ssh-agent, SSH Server Broke, and SSH Server Proxy in hopes they'll see the changes in the config file. I then use putty to ssh to localhost. Putty asks for my username but then it asks for my password and successfully connects when I put it in.

In Windows 10's new SSH feature how can I disable password authentication?

2
  • 3
    As of Windows 10 April 2018 Update (version 1803) the config file is in c:\ProgramData\ssh\sshd_config Commented May 2, 2018 at 19:14
  • Thx @GeneGoykhman. Note you can override this location in the Windows Services registry if you want to.
    – MarcH
    Commented Jun 23, 2018 at 21:53

2 Answers 2

7

In Windows 10 v1803 (aka 17134.191) it has changed.

Edit c:\ProgramData\ssh\sshd_config (aka %PROGRAMDATA%\ssh\sshd_config)

2

You note that you have the service "SSH Server Proxy" - this service is not part the "OpenSSH Server (Beta)" optional feature in Windows 10 Fall Creators Update (v1709). It is part of Windows Developer mode - I wonder if this (possibly in combination with WSL) is leading to you connecting to a different OpenSSH server unintentionally, and why it appears the config is not being respected.

Try stopping or disabling the "SSH Server Proxy" service and see if the behavior changes, or alternatively, adjust the port # in your Windows\System32\OpenSSH\sshd_config to a non-standard port and test again.

I just deployed a lab Windows 10 v1709 VM to test this, and can confirm that by uncommenting the "# PasswordAuthentication yes" line (and switching the value to "no") that with only an sshd service restart, it blocks password-based logins.

The only services "OpenSSH Server (beta)" gives me are "sshd" and "ssh-agent". Fresh VM, without Windows Developer Mode or WSL / Bash on Ubuntu enabled.

1
  • What is the default value if I have the line #PasswordAuthentication yes which means that there is passwordauth not set.
    – Timo
    Commented Jun 25, 2021 at 20:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .