Skip to content

Instantly share code, notes, and snippets.

@thatreguy
Last active February 19, 2020 07:11
Show Gist options
  • Save thatreguy/473cd5b28e3d3db07e19499719d00d40 to your computer and use it in GitHub Desktop.
Save thatreguy/473cd5b28e3d3db07e19499719d00d40 to your computer and use it in GitHub Desktop.
Windows OpenSSH server survival tips
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# 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 ::
#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
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
#AuthorizedPrincipalsFile none
# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# 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
# GSSAPI options
#GSSAPIAuthentication no
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum 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
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
@thatreguy
Copy link
Author

thatreguy commented Jan 1, 2020

choco install openssh --pre

Edit C:\Program Files\OpenSSH-Win64\sshd_config_default and Set PubkeyAuthentication yes. Also comment out last line saying:
Match Group administrators
AuthorizedKeysFile PROGRAMDATA/ssh/administrators_authorized_keys

Open cmd and create directory .ssh in the user's root directory (%userprofile%) (Also see: https://github.com/PowerShell/Win32-OpenSSH/wiki/ssh.exe-examples#setup-server-side-sshd). In that directory add contents of your public key in file authorized_keys

Go to C:\Program Files\OpenSSH-Win64 and run install-sshd.ps1 in powershell

open cmd as admin and run net stop sshd and net start sshd

If on GCP, enable port 22 inbound

On Windows Firewall enable port 22 inbound

For debugging, stop sshd service first and then from an elevated cmd: sshd -ddd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment