Aikoinaan PuTTY oli (käytännössä) ainoa vaihtoehto Windows-maailmassa saada SSH käyttöön. Nyttemmin jopa win-maailma on kehittynyt ja jos tarvitsee shell-yhteyden virtuaaliserveriinsä, niin Windowsin oma komentorivikehoite ajaa asian. Ero tulee laajuudesta ja muutamasta elämää helpottavasta nyanssista, jotka Windowsin käyttämästä OpenSSH-ratkaisusta puuttuvat: useamman serverin tallennetut tiedot nopeasti valittavina ja useampi konsoli samaan yhteyteen helposti.
Useimmille kuitenkin Windowsin komentokehoite riittää. Avaat sen ja annat komennon ssh root@<ip-osoite>
(tai millä tunnuksella sitten kirjaudutkaan, minä käytän aina root-tunnusta) ja homma on hoidossa.
Ensimmäisellä kerralla sinulta kysytään, että luotatko serveriin ja kun siihen on vastannut yes
niin asia on kunnossa ja pääset kirjautumaan. Kirjautumisessa sinulta kysytään salasanaa aivan normaalisti, tunnushan annettin jo ssh-komennossa.
Jos haluat useamman konsolin auki, niin joudut avaamaan sen erikseen Käynnistä-valikon kautta. Vaikka kiinnittäisit komentokehoitteen alapalkkiin (jonka tietysti teet), niin siitä et saa uutta ikkunaa auki millään hiiren korvalla.
SSH ei onnistunut
Jos konsoli ei tunnistanut ssh-komentoa, niin sinulla ei ole sitä asennettuna. Nykyisellään SSH pitäisi olla automaattisesti otettuna käyttöön ja ainoastaan SSH serveri on valinnaisissa. Mutta SSH:n käyttöönotto on sekennin homma.
Mene Asetukset > Sovellukset > Valinnaiset ominaisuudet > Lisää ominaisuus
ja etsi OpenSSH-asiakas
. Klikkaa sitä ja valitse Asenna
.
Avaimien luominen vaatii SSH-serverin. Asenna ssh-avainten takia OpenSSH-palvelin
vain, jos sinulla ei ole PuTTYä asennettuna, etkä jostain syytä sitä tai vastaavaa koskaan aiokaan asentaa.
SSH-serveri
Jos varsinaista tarvetta ei ole, niin erilaisten serverien pyörittäminen on yleensä sarjaa huonot ideat. Mutta jos tiedät tarvitsevasi OpenSSH-serverin Windows 10 koneessa, niin sen asentaminen on minuutin juttu plus pakollinen uudelleenkäynnistys.
Tarve tulee silloin kun haluat päästä etänä sisälle omalle käyttäjätunnuksellesi komentoriville. Kyse ei siis ole etäkäytöstä sinällään, jossa etäkonetta käytetään kuin jos olisi fyysisesti paikalle. Toki shellissä, komentorivissä, pääsee käyttämään Windowssin resursseja ja asioita, mutta ei sen kummallisemmin kuin jos olisi aidon fyysisesti samassa shellissä. Joten siltä osin SSH:lla luotu shell-yhteys on etäkäyttöä, mutta ei kuitenkaan ole – ja ei ole sillä merkityksellä, että et pääse graafiseen osaan.
SSH-avainten luominen, joilla pääsee kirjautumaan ilman salasanoja jollekin toiselle koneelle – tai perheen muusta koneesta omalle – vaatii serverin. Mutta jos serveritarve ei tuon kummallisempaa ole, niin asenna PuTTY.
OpenSSH serverin asennus
Avaa PowerShell järjestelmänvalvojan oikeuksilla. Helpoiten löydät sen, kun avaat haun (sen suurennuslasin) ja alat kirjoittamaan powershell. Kun se ilmestyy tuloksiin, niin klikkaa oikealla hiirenkorvalla ja valitse Suorita järjestelmänvalvojana.
- Tarkistetaan mikä on OpenSSH:n tilanne
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Syötteen pitäisi olla tämänkaltainen:
Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent
- Ladataan ja asennetaan OpenSSH serveri:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Sinun pitäisi nähdä suunnilleen tällaista:
Path : Online : True RestartNeeded : False
- Käynnistetään OpenSSH serveri:
Start-Service sshd
- Käynnistymisestä ei kerrota mitään, joten tarkistetaan:
Get-Service sshd
Tämä kertoo serverin olevan käynnissä ja jotakuinkin järjissään:
Status Name DisplayName ------ ---- ----------- Running sshd OpenSSH SSH Server
- Serverin pysäyttäminen tapahtuu samankaltaisella komennolla:
Stop-Service sshd
SSH-serveri ei tietenkään suostu sammumaan pysäytyskomennolla (alan oikeasti kyllästymään Windowsin hallinnan työläyteen). Koska yksi resurssi käyttää serveriä, niin se on pakotettava sammumaan -f
vivulla. En tiedä miksi Microsoftin insinöörit ovat tehneet komennon, jota ei voi koskaan sellaisenaan käyttää. Tai miksi Microsoftin dokumentit eivät kerro tuota – oivaltamisen ilo ja siihen malliin.
Varsinaista restart-komentoa ei ole. Joko se tehdään etsimällä ssh-serveri palveluista (hae services.msc
ja sieltä OpenSSH server) tai sitten pysäyttämällä ja käynnistämällä.
- Jos/kun haluat OpenSSH serverin käynnistyvän Windowsin käynnistyessä, niin komenna tämä:
Set-Service -Name sshd -StartupType 'Automatic'
- Osa ohjeista haluaa myös tämän, osa ei. Tiedä sitten. En ole koskaan joutunut käyttämään ssh-agentia tai sitten en ole vaan löytänyt sen onnea ja auvoa.
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
- Palomuurin asetukset laitetaan automaattisesti OpenSSH serverin käynnistyessä. Jos halua nähdä mitkä asetukset ovat voimassa, niin tämä kertoo:
Get-NetFirewallRule -Name *ssh*
Jos jostain syystä palomuurista ei löydykään Windowsin OpenSSH serverin asetuksia, niin ne saa luotua tällä:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
- Jos sinulle tulee joskus tarve poistaa OpenSSH serveri:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
WSL2 ja Ubuntu app
Jos olet asentanut tai aiot asentaa Windows Subsystem for Linux ja vaikka Ubuntun komentoriviversiona, niin sinun on syytä asentaa myös Windowsin OpenSSH-palvelin. Ubuntun OpenSSH serveriin ei enää pääse kirjautumaan ulkoa, vaan täytyy kiertää Windowsin kautta. Tarkoittaa myös sitä, että linuxin OpenSSH-serveriä ei tarvita muuhun kuin sisäverkossa liikkumiseen, kun haluat Ubuntustasi yhteyden toiseen Ubuntukoneeseen samassa verkossa. Jos kaikki ovat windowskoneita, tai niissä on WSL asennettuna, niin linuxin OpenSSH serveriä ei tarvita – mutta tämä tarvitaan.
SSH-avaimen luonti
Jossain vaiheessa kyllästyt käyttämään salasanaa ja silloin kuvioihin tulee mukaan SSH-avaimet. Saat luotua avainparin komentokehoitteessa ja itseasiassa aivan samalla tavalla kuin mitä tekisit serverin shellissä.
- Anna komento:
ssh-keygen
- Sinulta kysytään tallennushakemistoa. Tarjottu oletus on hyvä, joten napauta enteriä
- Sinulta kysytään avaimen salasanaa. Turvallisuusfriikit antavat salasanan, koska se hidastaa avaimen varastamista. Me, jotka arvostamme helppokäyttöisyyttä ja että nimenomaan ei tarvitse antaa mitään salasanaa käytössä, emme käytä salasanaa ja napautamme enteriä. Vahvista tyhjä tai annettu salasana uudestaan.
SSH-avainpari on nyt luotu ja julkinen avain, joka pitäisi siirtää serverille, sijaitsee tiedostossa C:\Users\käyttäjä/.ssh/id_rsa.pub
Tuo on siirrettävä käsin serverille, koska Windows ei tarjoa komentoa, jolla se saataisiin liitettyä virtuaaliserverillä olevaan tiedostoon authorized_keys
.
- Avaa
id_rsa.pub
Muistioon
notepad C:\Users\käyttäjä\.ssh\id_rsa.pub
Tai jos sinulla WSL käytössä:
wsl cat C:\Users\käyttäjä\.ssh\id_rsa.pub
- Varmista Muistiossa, että automaattinen rivitys ei ole päällä. Kopioi sisältö.
- Avaa virtuaaliserverillä, tai mihin sitten Windowsin julkisen avaimen siirrätkään, tiedosto
authorized_keys
. Jos sinulla ei ole kotihakemistossa hakemistoa.ssh
niin luo se ensinmkdir ~/.ssh
. Rootin kotihakemisto on/root
ja käyttäjien/home/käyttäjä
. Omaan kotihakemistoon pääsee komennollacd ~/
tai yksinkertaisesti vain antamallacd
.
cd && nano .ssh/authorized_keys
- Liitä kopioitu sisältö omalle rivilleen. Varmista, että mukaan ei tullut ylimääräisiä rivinvaihtoja.
- Jos jouduit luomaan hakemiston
.ssh
ja tiedostonauthorized_keys
, niin varmistetaan oikeudet ja omistajuus:
chmod -R 700 .ssh chmod 600 .ssh/authorized_keys chown -R root:root .ssh
- Jos loit hakemiston ja
authorized_keys
tiedoston jollekin muulle tunnukselle, niin vaihda rootin tilalle aito tunnus.
Nyt konsolissa komento ssh tunnus@ip-osoite
kirjautuu käyttämällä ssh-avaimia eikä kysele salasanojen perään.
Jos avainta ei hyväksytä, niin kaksi ehdottomasti yleisintä syytä ovat, että avain ei ole yhdellä rivillä tai mukana on ylimääräisiä merkkejä. Jos Muistiossa ei ollut rivitystä päällä, niin luultavammin mukaan on tullut silti rivin päättävä näkymätön merkki, joka ei kelpaa linuxeissa. Se on ratkaistavissa kahdella tapaa. Joko siirrät id_rsa.pub
tiedoston serverille ja kopiot tiedoston cat
komennolla tai avaamalla nanossa. Fiksuin tapa on asentaa Notepad++ Windowsiin ja käyttää sitä originaalin Notepadin sijaan.
Muualta Windowsiin
Julkisen avaimen kopiointi jostain muusta koneesta Windowsiin tapahtuu aivan samoin, mutta päinvastoin. Ainakin periatteessa. On nimittäin pari muttaa. Isoa sellaista.
Hae kuitenkin valmiiksi julkinen avaimesi, joka on tarkoitus siirtää Windowsiin. Oletetaan, että kone, josta haluat päästä Windowsiin, on linux.
cat ~/.ssh/.ssh/id_rsa.pub
Jos Windows-tunnuksesi on tavallisen käyttäjän tunnus, niin julkinen avain kopioidaan kotihakemistosi .ssh
-hakemistossa olevaan authorized_keys
tiedostoon. Sen saat tehtyä tavalliseen tapaan vaikka Muistiolla tai jos sinulla on WSL asennettina, niin komento wsl nano authorized_keys
toimii.
Mutta jos tunnuksesi on ylläpitäjätason tunnus, kuten useimmilla lienee, niin se onkin vietävä tiedostoon C:\ProgramData\ssh\administrators_authorized_keys
– ja se ei sitten onnistukaan resurssinhallinnalla ja muistiolla, tai edes WSL/Ubuntu asennuksella.
- Avaa PowerShell ylläpitäjän oikeuksilla.
- Siirry hakemistoon
C:\ProgramData\ssh
- Jos sinulla on WSL asennettuna, niin komenna
wsl touch administrators_authorized_keys && notepad administrators_authorized_keys
Jos ei, niin anna sitten suoraannotepad
-komento, joka laittaa automaattisesti .txt tiedostonimeen ja joka täytyy sitten jollain tavalla saada pois sieltä; minä en enää muista miten moinen DOS:ssa tehtiin - Kopioi julkinen avaimesi ja tallenna
Seuraavaksi täytyy laittaa authorized_keys
tiedoston oikeudet kuntoon. Jos jätät tämän tekemättä, niin kirjautuminen avaimen avulla ei onnistu, vaan koko ajan kysytään salasanaa logien kuitenkin väittäessä, että kaikki toimii.
Muuta sen authorized_keys
tiedoston oikeudet mikä sinua koskee. Oikeudet ovat samanlaiset, mutta sijainti on tietysti eri. Avaa PowerShell ylläpitäjänä ja valitse sopiva hakemisto:
cd C:\ProgramData\ssh cd C:\Users\tunnus\.ssh
Avaa hakemisto resurssinhallintaan:
start .
Klikkaa tiedostoa administrators_authorized_keys
tai authorized_keys
hiiren oikealla korvalla ja avaa Ominaisuudet. Valitse välilehti Suojaus. Klikkaa alhaalta Lisäasetukset.
Klikkaa aivan ensimmäiseksi nappulaa Poista periytyminen käytöstä.
Kysyttäessä valitse ensimmäinen kohta: Muunna perityt käyttöoikeudet eksplisiittisiksi käyttöoikeuksiksi tässä objektissa.
Tiedostolla saa olla vain kaksi käyttäjää:
- oma tunnuksesi
- SYSTEM
Poista ylimääräiset roolit, kuten esimerkiksi Järjestelmänvalvojat valitsemalla se ja klikkaamalla Poista.
Kun tulevaisuudessa liität luotettuja avaimia kiertämällä resurssinhallinnan kautta ja avaat authorized_keys
tiedoston oikean hiirenkorvan kautta, niin riittää, että vain sinulla on kirjoitusoikeudet ja SYSTEM käyttäjällä on lukuoikeudet. Mutta jos muokkaatkin sitä PowerShellin kautta komennolla notepad
, niin myös SYSTEM tarvitsee kirjoitusoikeudet.
Jos olet luonut itse administrators_authorized_keys
tiedoston, niin sillä ei todennäköisemmin ole ketään listassa. Silloin sinun täytyy luoda tarvittavat roolit klikkaamalla Lisää.
Tallenna ja poistu.
Nyt SSH-avaintesi pitäisi päästää sinut sisälle Windowsiin ilman, että kysellään salasanaa.