Skip to content
On this page

SSH

Copy Keys

bash
mkdir -p ~/.ssh
mkdir -p /home/node/.ssh
cp ~/.ssh/id_ed* /home/node/.ssh/
chmod -R 700 /home/node/.ssh/
chown -R node:node /home/node/.ssh/

SSH Windows MSI Install

ps1
# https://github.com/PowerShell/Win32-OpenSSH/releases/tag/v9.5.0.0p1-Beta

Set Default shell in powershell

ps1
# set default as powershell
# powershell 5...
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
# pwsh 7
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
ps1
# firewall / start service
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.*' | Add-WindowsCapability –Online
ps1
# msi installs the firewall

Add Keys

Add Administative keys

ps1
# https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement#administrative-user
# https://github.com/PowerShell/openssh-portable/blob/5622b51825b997bc5a958923f837bd1442fa05d0/contrib/win32/openssh/install-sshd.ps1#L96

## NOTE: remember copying changes the perms
# https://serverfault.com/questions/380712/ssh-public-key-format
# RFC4716
# ssh-keygen -i -m PKCS8 -f public-key.pem
# add-content -force -path "C:/ProgramData/ssh/administrators_authorized_keys" -value "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG8YNDTSq1BTAA4KFPowIyPGbpwLKtli9Iyk6nyrM4vF some public key"

icacls.exe "C:/ProgramData/ssh/administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
icacls.exe "C:/ProgramData/ssh/administrators_authorized_keys"

# add own key ed25519
add-content -force -path "C:/ProgramData/ssh/administrators_authorized_keys" -value (get-content "$HOME/.ssh/id_ed25519.pub")

# smoke test - to local host
get-content "C:/ProgramData/ssh/administrators_authorized_keys"
ssh localhost hostname
## 
ssh localhost
# check pwsh version - double quotes needed because powershell
write-host ""PSVersion: $PSVersionTable.PSVersion""
$PSVersionTable.PSVersion
# printenvs ps1 version:
Get-ChildItem env:

exit