Je to totální prasárna, ale pokud se chcete vyhnout částečně powershellu, tohle je částečná cesta. Každopádně v tomto rychlonávodu si ukážeme, jak rozběhat OpenSSH server na Windows tak, aby se na něj dostali uživatelé z Linuxu, nebo z jiných Windows či Macu. Navkládám tu i odkazy na konfiguraci serveru.
Instalujeme OpenSSH server na Windows
Otevřeme příkazovou řádku / START / spustit / cmd / spustit
pravým tlačítkem na spuštěné okno dole na liště / spustit jako / administrator / vyskočí tabulka s právy na potvrzení pravomocí / dáme ano /
napíšeme powershell a dáme enter a pak vložíme tento příkaz a nainstaluje se nám OpenSSH server
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
#POkud by nesouhlasily verze, tak koukneme, jaké jsou verze k dispozici teď:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
#Povolíme práva a nastavíme OpenSSH server aby startoval automaticky se startem windows:
# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
Vytvoříme klíče (rsa nebo ed25519, který je „bezpečnější“)
Podle následujícího návodu:
https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement
Zkusíme vytvořit klíče:
Microsoft Windows [Version 10.0.19045.3324]
(c) Microsoft Corporation. Všechna práva vyhrazena.
C:\Users\user>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\Users\user> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_ed25519): //enter
Enter passphrase (empty for no passphrase): //pro automatizovaný přístup bez hesla stačí dát enter
Enter same passphrase again: //znovu enter
Your identification has been saved in C:\Users\user/.ssh/id_ed25519.
Your public key has been saved in C:\Users\user/.ssh/id_ed25519.pub.
Ověříme, že funguje ssh-agent
C:\WINDOWS\system32>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\WINDOWS\system32> Get-Service ssh-agent | Set-Service -StartupType Automatic
PS C:\WINDOWS\system32> Start-Service ssh-agent
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> Get-Service ssh-agent
Status Name DisplayName
------ ---- -----------
Running ssh-agent OpenSSH Authentication Agent
Vložíme klíč do "bezpečného úložiště" pro použití tohoto klíče pro připojení na vzdálené servery jako defaultní.
(v tomto návodu se můžeme obejít i bez toho, ale přikládám to tu jako užitečnou pasáž)
PS C:\WINDOWS\system32> ssh-add $env:USERPROFILE\.ssh\id_ed25519
Identity added: C:\Users\user\.ssh\id_ed25519 (user@pocitac)
PS C:\WINDOWS\system32> $authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ed25519.pub
PS C:\WINDOWS\system32> $remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""administrators:F"" /grant ""SYSTEM:F"""
# vyzkoušíme, že se public klíč dokáže přidat na tomto stroji
# Bude to chtít zadat heslo pro uživatele user:
PS C:\WINDOWS\system32> ssh user@localhost $remotePowershell
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:c7aosdjaosdhfuashdfluashdfulsahYFZ3M.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
user@localhost's password:
processed file: C:\ProgramData\ssh\administrators_authorized_keys
Successfully processed 1 files; Failed processing 0 files
Nainstalujeme editor VIM
Nainstalujeme Vim, který lze stáhnout na tomto odkazu. (silentinstall baťáček možná někdy příště)
// Vimem vložím obsah id_ed25519.pub do C:\ProgramData\ssh\administrators_authorized_keys což je ekvivalent na windows /root/.ssh/authorized_keys na Linuxu, pokud to za nás neudělal předchozí příkaz.
Takže 1 vložený řádek do administrators_authorized_keys bude vypadat nějak takto:
ssh-ed25519 hashpublicklíčeigaodfiadfaisdhfaoushfapfgapizgfasfa user@jménopc
PS C:\Users\user> vim C:\ProgramData\ssh\administrators_authorized_keys
// Potom musíme nastavit oprávnění pro administartors_authorized_keys
PS C:\Users\user> icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "administrators:F" /grant "SYSTEM:F"
processed file: C:\ProgramData\ssh\administrators_authorized_keys
Successfully processed 1 files; Failed processing 0 files
Přihlášení přes ssh z Linuxu do Windows
A na vzdáleném linuxovém stroji, kde chci přistupovat např. z uživatele root, který má ed25519 klíč
ssh -p22 -i /root/.ssh/id_ed25519 uživatel@IPWindows
// možná se vaše windows nacházejí na jiném cílovém portu, než na portu 22, proto jsem uvedl parametr -p22, někdo si to může vložit na port -p80 nebo -p443, aby to nevypadalo tak podezřele.
Pokud chci něco nakopírovat z filesystému z windows na linux:
scp -P22 -i /root/.ssh/id_ed25519 -r uživatel@IPWindows:/C:/Users/uživatel/adresář/ ./
Pokud chci něco nakopírovat ze stroje z roota do vzdáleného pc:
scp -P22 -i /root/.ssh/id_ed25519 -r /nejaka/cesta/k/adresari/ uživatel@IPWindows:/C:/Users/uživatel/adresář/
scp -P určuje port. Pozor, ssh -p zatímco ssh -P (velké vs. malé p), scp -r (rekurzivně vč. podadresářů) odkudZLokálníhoAdresáře kamUživatel@KamCílováMašina:/C:/složka/Na/Windows/kam/chci/něco/nahrát/
Co Windows subsystem for linux Na Windows + Virtualbox?
Tady si nemohu dovolit nestabilitu Virtualboxu, nebo WSL2 pro Windows, nicméně jsem našel řešení zde.
Ve zkratce. Použít hypervisor virtualboxu tak, aby používal microsoft hyper-v a nemělo by to ničemu vadit. Nicméně ve stejné diskusi se nacházejí komentáře, které oznamují crashující WSL2, nebo problémy s Virtualboxem. I přesto je OpenSSH na windowsáckých stanicích výhra, lze pouštět baťáky, powershell skripty, kopírovat a přepisovat soubory (hlavně konfiguráky) a pokud to jde takto, mělo by to jít později zkombinovat i s ansiblem, balíčkovacím systémem chocolatey.
Rychlokurz Chocolatey
Na tomto odkaze máte návod, jak rozběhat pár příkazy balíčkovací systém chocolatey na vašem systému. Ale musíte trošku sáhnout do bezpečnosti. https://chocolatey.org/install#individual
Pak už jste schopni příkazy choco install názevBalíčku nainstalovat téměř jakýkoliv software. Má to výhody i nevýhody. Nevýhody v tom, že nikdy nemáte nejnovější verze, ale „stable“, tedy 1 až 2 verze starší, než novější. Výhoda však je, že pokud potřebujete teď a tady něco nainstalovat, tak to lze udělat skriptem, z linuxu, na windows a instalovat tak vše potřebné z repozitářů za chodu. Můžete si taky udělat vlastní repozitář a instalovat vše co chcete z vlastního repozitáře, ale tam se ještě propracuji, abych nabídl svým uživatelům částečnou nezávislost. Nebo naopak mě pomoci řešit deployment automatizovaně, např. skrze pipeliny v Gitlabu. 😉