Windows – Location of OpenSSH configuration file on Windows

command lineopensshsshwindows

How do I set the host name and port in a config file for Windows, using OpenSSH through PowerShell?

As on Unix/Linux:

Edit or create the file now by typing:

nano ~/.ssh/config

In here, you can set host-specific configuration options. To specify
your new port, use a format like this:

Host remote_alias
HostName remote_host
Port port_num

This will allow you to log in without specifying the specific port
number on the command line.

https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys

Best Answer

In Windows 10 with PowerShell, the configuration files are not created, so we have to create them ourselves.

This answer was done with: Windows 10 PRO 20H2 (Build 19042.804)
And with the last OpenSSH-Portable (v8.1.0.0p1-Beta) from the official GitHub here

NOTE 1 : Here I show how to configure only the configuration file "config" in the folder .ssh, which should be in the user folder $HOME\.ssh , because it is what is required, normally, it seems to me that the other files are created automatically when one Install Open-SSH server. if this is not the case, simply adapt the command lines

NOTE 2 : Have Git for Windows and OpenSSH-portable can cause problems for the configuration of the agent, so you should know that it is the SSH-Agent uses by the Windows service

You can find out which ssh-agent is used by the Windows service with this command :

Get-WmiObject win32_service | ?{$_.Name -like 'ssh-agent'} | select PathName

If the Get-WmiObject command no longer works you can use the Get-CimInstance command which should be its definitive successor for new versions of PowerShell


# Create the config file with Powershell
New-Item -Path $HOME\.ssh\config -ItemType File

# Open config File with Notepad
C:\WINDOWS\System32\notepad.exe $HOME\.ssh\config

# or Open file with Visual Code
code $HOME\.ssh\config

After that, you can configure the SSH configuration file as you want with the same syntax as on Linux

Little example

# Config for use specific key for github
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github
  IdentitiesOnly yes

# For server 172.x.x.x
Host 172.x.x.x
  User user
  Port 2121
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

# For all other servers
Host *
        User root

Now you can test your config like that :

# For Github

ssh -T git@github.com

# For other
# It is possible not to put the user to check,
# if you have indicated a specific user
# in the conf file, to test if the configuration
# will connect well with this user

ssh -T 172.x.x.x

If ssh doesn't work, this is because you don't have the OpenSSH folder in your environment variables, you can add it to your system environment variable like that in Powershell if you install
OpenSSH Binary in C:\Program Files
and the folder name is OpenSSH-Win64

# PowerShell admin
# Add folder OpenSSH to your System Environnement
[System.Environment]::SetEnvironmentVariable('OPENSSH', 'C:\Program Files\OpenSSH-Win64', [System.EnvironmentVariableTarget]::Machine)

Other Command

# Generate EdDSA Key
ssh-keygen.exe -t ed25519 -a 100 -o -C "user@example.com" -f "$HOME\.ssh\id_ed25519_example.com"

# Config the SSH Agent service
# For start the service when logon
Set-Service ssh-agent -StartupType Automatic

# Start the SSH Agent
Start-Service ssh-agent

# Restart service always when you change the config file
Restart-Service ssh-agent

# Add the key to the SSH Agent
ssh-add $HOME\.ssh\id_ed25519_example.com