tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Windows 10 ja SSH

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.

  • Avaaid_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 ensin mkdir ~/.ssh. Rootin kotihakemisto on /root ja käyttäjien /home/käyttäjä . Omaan kotihakemistoon pääsee komennolla cd ~/ tai yksinkertaisesti vain antamalla cd.
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 tiedoston authorized_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 suoraan notepad-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.