tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

PuTTY – SSH Windowsiin

PuTTY on ehkä eniten käytetty SSH-asiakas Windows-maailmassa. Se on se työkalu, jolla päästään oman serverin komentorivikehoitteeseen. Shell on paikka, jossa kaikki asennukset, muokkaukset ja säädöt tehdään verkkomaailmassa. Sitä kutsutaan myös aika anoin nimellä bash, mutta aidommin se taitaa olla se komentotulkki, jota SSH:ssa käytetään. Aivan jumattoman tyhmä, mutta kierolla tavalla kuvaava, tapa olisi kutsua Windowsia Wordiksi, tai internetiä webiksi.

PuTTY:n asentaminen on suunnattoman helppoa. Suuntaa tänne ja lataa 64-bittinen .msi-tiedosto. Kun se latautunut (ei ole iso), niin tuplaklikkaa ja asenna normaalisti.

Taviksilla on aika ajoin vaikeuksia ymmärtää SSH-avainten logiikka siinä suhteessa, että mitä avainnippua milloinkin laitetaan mihinkin. Mutta analogia perinteiseen salasanaan on hyvin yksinkertainen ja samanlainen. PuTTY:n kanssa se on harvemmin (asenne)ongelma, koska mennään erillisen ohjelman mukaan. Mutta jos on vaikka useampi virtuaaliserveri, oli ne Amazonilla, DigitalOceanilla tai missä tahansa, niin niiden välillä sekoillessa ei enää olekaan ihan selvää mitä, kuka ja missä.

  • Salasana on sellainen, jonka vain sinä tiedät. Niin on salainen avainkin. Eli kirjautuvalla on salainen avain hallussaan.
  • Salasana on annettu selväkielisenä sinne mihin kirjaudutaan. Niin on annettu julkinen avainkin. Eli sillä, mihin kirjaudutaan, on julkinen avain hallussaan.
  • Ainoa periaatteellinen ero on se, että salasana on sama merkkijono kummassakin päässä. SSH-avaimissa ne ovat erit.

Peruskäyttö

Käynnistä PuTTY. Saat (lähes) tällaisen ikkunan.

  • Hostname (or IP address): laita dropletin, VPN:n tai mihin sitten haluatkin ottaa yhteyden, IP-osoite
  • Saved session: Laita joku itsellesi helposti muistettava ”pikavalinta); kuvassa on Eksis ja Ubuntu
  • klikkaa Save

Mihinkään muuhun ei tarvitse koskea.

Yhteyden saat auki valitsemalla antamasi nimi ja klikkaamalla Open. Sinulle aukeaa musta ruutu, johon annat käyttäjätunnuksesi ja salasanasi. Istunnosta pääset pois kirjoittamalla exit. Toki voit sulkea PuTTY:n ikkunan perinteiseen win-tyyliin, mutta se on ruma tapa.

SSH-salaus

Pystyt automatisoimaan kirjautumisesi käyttämällä SSH-salausta. Silloin sinulta ei kysytä käyttäjätunnusta eikä salasanaa, vaan kirjautumiseen käytetään salasanaketjuja. SSH:n käyttö on turvallisempaa kuin tunnus/salasana – niin kauan kun et anna muille salaista avaintasi, joka on tiedosto omalla tietokoneellasi. Käytännön merkitys on, että oma kirjautumisesi helpottuu, ja vaikka turvallisuusaspekti on aivan pätevä, niin se on merkityksetön – jos käytät kunnollista salasanaa.

Käytännön toteutus sen suhteen miten SSH luodaan, voi hieman erota järjestelmästä toiseen, mutta tämän pitäisi olla kohtuullisen universaali tapa Windows-maailmassa. Koska salasanaparit luodaan omalla tietokoneellasi, niin saatat kyetä tekemään ne suoraan omassa komentorivikehoitteessasi – googleta. Kohteena käytän DigitalOceanin dropletia.

Avainten luonti

Käynnistä PuTTYgen. Sinulle avautuu tällainen ikkuna.

Oletusasetukset ovat riittäviä. Saat tehtyä avaimesta turvallisemman, jos muutat avaintyyppiä ja sen pituutta. Aika turhaa, ellet huolehdi tiedustelupalveluista tai yritysvakoilusta.

Klikkaa Generate.

Vihreä etenemispalkki ilmestyy ja sinua pyydetään pyörittämään satunnaisella kuviolla hiiren kursosia palkin alla olevalla tyhjällä alueella. Sitä käytetään satunnaislukugeneraattorian avainten luonnissa.

Muutamassa sekunnissa avaimet on luotu ja ikkuna on tämän näköinen:

Voit antaa erillisen salasanan suojaamaan SSH-avainta. Silloin kirjautumisessa sinulta kysytään sitä, tai joudut käyttämään erillistä SSH-avaimen tarjoavaa ohjelmaa, joka pitää omassa muistissaan salasanan. Koska tuossa vaiheessa vaiva ylittää turvallisuuden, niin en käytä salasanaa – mutta se suojaisi, jos pelkäät SSH:n salaisen avaimen ajautuvan vääriin käsiin ilman, että itse huomaat.

Älä tallenna julkista avainta. Sen saa aina näkyviin PuTTYgen avulla.

Tallenna salainen avain. Tallenna se johonkin turvalliseen paikkaan koneellasi, josta kuitenkin löydät sen. Tarvitset sitä SSH-ohjelmaan, kuten PuTTY:n käyttöön. Klikkaa Save private key ja vastaa Yes, jos tallennat ilman erityistä salasanaa.

Voit generoida erilliset avainparit jokaiseen palveluun, jota käytät. Tai käyttää samaa joka paikassa. Molemmissa tavoissa on puolensa.

Julkisen avaimen asettaminen

Useimmiten et saa kopioitua julkista avainta suoraan. Joudut kopioimaan sen käsin.

Jos sinulla on edelleen PuTTYgen auki, niin tarvitsemasi julkinen avain näkyy tekstimuodossa Otsikolla Key / Public key for pasting… Kopioi se.

Kirjaudu DigitalOceanin dropletiin PuTTY:llä perinteisellä tavalla tunnuksella ja salasanalla. Asennettava SSH-avain koskee nimenomaan sitä tunnusta, jolla kirjaudut.

Luo .ssh hakemisto oman käyttäjäsi kotihakemistoon.

mkdir -p ~/.ssh

Luo tiedosto, jossa julkisia avaimia säilytetään.

nano ~/.ssh/authorized_keys

Liitä siihen kopioimasi julkisen avaimen sisältö. Saat PuTTY:ssä liitettyä kursorin kohdalle klikkaamalla hiiren oikeaa korvaa (jos et ole sitä PuTTY:n asetuksista varta vasten muuttanut).

Tallenna ja poistu tiedostosta ctrl-x ja vastaamalla y.

Asetetaan tehdyn .ssh -hakemiston oikeudet:

chmod -R go= ~/.ssh

Asetetaan hakemiston omistaja:

chown -R $USER:$USER ~/.ssh

Kirjaudu ulos shellistä.

Salainen avain ja PuTTY

Nyt SSH:n salainen avain täytyy kertoa PuTTY:lle, muutoin sinulta kysytään edelleen käyttäjätunnusta ja salasana.

Itse teen samaan paikkaan toiseen tunnuksen PuTTY:lle. Silloin minulla on kaksi pikavalintaa samaan paikkaan: toinen kirjaa tunnus/salasana-kyselyllä, toinen taasen käyttäen SSH-avainta. En minä tiedä onko tuossa mitään aitoa järkeä, mutta tykkään pitää vaihtoehdot avoimena helpolla tavalla.

Uuden osaatkin jo tehdä. Vanha avataan valitsemalla nimi ja klikkaamalla Load. Jos avaat vanhan ja tallennat sen uudella nimellä, niin se on sama asia kuin Save As…

Avaa kohta SSH > Auth. Hae kohtaan Private key file for authentication koneelle tallentamasi salainen avain, se mikä piti pitää tallessa.

Avaa kohta Connection > Data. Anna kohtaan Auto-login username se käyttäjätunnus, jolle teit dropletissa .ssh-hakemiston.

Valitse Session ja tallenna klikkaamalla Save.

Avaa PuTTY ja sinun pitäisi nyt päästä kirjautumaan ilman tunnusta ja salasanaa.

Server refused our key

Voit saada virheilmoituksen, jonka mukaan serveri ei ole hyväksynyt avainta ja tarjoaa mahdollisuutta kirjautua salasanalla. Yleisimmät syy ovat:

  • kopioitu julkinen avain ei ole yhdellä rivillä
  • kopypastevirhe, jossa osa merkeistä on jäänyt kopioimatta
  • väärät oikeudet hakemistoissa ja avaimen sisältävässä tiedostossa

Tee yksi asia kerrallaan ja kokeile aina joko kirjautuminen onnistui. Jos klikkaat oikealla hiiren korvalla PuTTY-ikkunan yläpalkkia, niin saat aukaistua uuuden ikkunan. Silloin saat aina yhdessä ikkunassa muutettua asioita ja samantien testattua toisessa.

Ihan ensimmäiseksi kannattaa kopioida julkinen avain uudestaan. Älä valitse tekstiä raahaamalla PuTTYgen ikkunasta, vaan napauta hiiren oikealla nappulalla ja valitse kaikki.

Ethän asettanut julkista avainta root-tunnuksella ja sitten yrittänyt kirjautua jollain muulla tunnuksella? Voit tehdä rootina asetukset valmiiksi, mutta muista asettaa julkinen avain silloin käyttäjän kotihakemistoon. Polku ~/ menee kirjautuneena olevan tunnuksen kotihakemistoon, joten jos laitetaan muuta tunnusta toimimaan, niin root joutuu kertomaan käyttäjän kotihakemiston, joka on Ubuntussa /home/tunnus. Tarkista, että olet tehnyt .ssh -hakemiston ja julkisen avaimen tiedoston oikeaan paikkaan.

Varmista tiedosto-oikeudet, ja huomaa kotihakemiston polku:

chmod -R 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Varmista omistajuus. Muuttujan $USER pitäisi osata käyttää kirjautunutta tunnusta, mutta minulla se on pissinyt usein. Aseta .ssh -hakemiston omistaja ja ryhmä aidoilla nimillä.

Jos teet root-tunnukselle ja olet rootina kirjautunut, niin:

chown -R root:root ~/.ssh

Jos teet jollekin muulle tunnukselle, niin:

chown -R tunnus:tunnus /home/tunnus/.ssh

Jos ei vieläkään toimi, niin alkaa syvempi selvittely.

Katso ensin mitä logi kertoo. Tämä antaa sinulle jatkuvan syötteen siitä mitä logiin kirjautuu.

tail -f /var/log/auth.log

ctrl-c päästää sinut pois.

Saat logista jo kirjautuneet tapahtumat ikäänkuin printtinä ruudulle, niin on ehkä helpompi selata:

cat /var/log/auth.log

Siellä on sitten luultavasti aivan tolkuton määrä ihmeellisiä kirjautumisyrityksiä. Älä piittaa niistä, kunhan koputtelevat.

Saatat saada jo tuosta vinkkiä, että onko ongelma esimerkiksi, että julkista avainta ei löydetä tai ei voida lukea, tai että hakemiston oikeudet ovat väärin. Minulle on kerran valitettu /root -hakemiston omistajasta tai oikeuksista, niin jouduin erikseen komentamaan nimenomaan tuon hakemiston omistajaksi ja ryhmäksi root:root.

Saat lisättyä logitettavaa tietoa. Avaa SSH:n asetukset:

nano /etc/ssh/sshd_config

Lisää rivi

LogLevel DEBUG3

Tallenna ja sulje. Käynnistetään SSH uudestaan.

systemctl restart ssh

Katso uudestaan mitä logi kertoo. DEBUG3 lisäsi informaatiota siitä mitä tapahtuu. Saatat saada paremmin selville mikä hakkaa vastaan. Kun olet valmis, niin muista kommentoida tai poistaa LogLevel DEBUG3 rivi ja käynnistää SSH uudestaan.

Lisäsäädöt

Jos sinulla on enemmänkin rohkeutta, niin voit estää kokonaan tunnuksella ja salasanalla kirjautumisen sekä voit estää root-tunnuksen käytön (jota en ymmärrä).

Avaa SSH:n asetukset:

nano /etc/ssh/sshd_config

Etsi rivi:

PasswordAuthentication yes

Muuta arvoksi no, niin kukaan ei enää kirjaudu tunnuksella ja salasanalla. Joten kannattaa olla varma, että SSH:lla kirjautuminen varmasti onnistuu. Jos homma kaatuu joskus, niin edessä on yhteydenotto palveluntarjoajan aspaan – mutta toki turvallisuutta tuo lisää hiukan, koska brute force ei enää onnistu.

Root-tunnus estetään tällä rivillä:

PermitRootLogin yes

Muuta arvoksi no. Sen jälkeen root-tunnuksella ei pääse enää sisään. Varmista, että omalla tunnuksellasi on sudo-oikeudet, koska jos ei ole, niin suuntana on taas tekninen aspa.

Muutosten jälkeen SSH on käynnistettävä uudestaan:

systemctl restart ssh

Serveriltä toiselle serverille

Kaikki edellä mainittu SSH-avaimista koskee kirjautumista omalta koneelta serverin shelliin. Ei tarvitse antaa salasanaa, ei siitä aidosti muuta suurempaa etua ole. Kun ollaan tilanteessa, että on kaksi PuTTY:n istuntoa auki, pitäisi siirtää rsync -komennolla tiedostoja serveriltä toiselle, ja kumpaankin on asennettu SSH-avaimet kirjautumista varten, niin maallikolla menee sormi suuhun. Enää ei kysytä salasanaa, vaan tulee tympeä ilmoitus siitä, että public key ei kelpaa. Tai ainakaan DigitalOceanin dropletit eivät kysy, vaikka rootin salasana olisikin asetettuna.

PuTTYllä luotuja salaisia avaimia voisi tietysti siirrellä paikasta toiseen, mutta ei se ei enää täytä turvallisuuden eikä näppäryyden vaatimuksia. Joten luodaan lisää SSH-avaimia, tällä kertaa shellissä.

Mene lähtöserverille, eli sinne mistä haluat kirjautua. Muista, että avaimet tehdään kirjautuneella tunnuksella, joten itselleni teen ne root-tunnuksella.

Luodaan salainen ja julkinen avain.

ssh-keygen

Hyväksy enterillä kysymykset sijainnista ja salasanasta – salasanan käyttö SSH-avainten kohdalla on minusta hyvin kaukana käytettävyydestä.

ssh-copy-id

Jos sinulla ei ole vielä kohdeserverillä, eli mihin haluat kirjautua lähtöserveriltä, tunnuksellasi SSH-avaimia, niin julkisen avaimen siirto on helppoa.

ssh-copy-id tunnus@kohdeserverin-ip

Ja taas tunnus on se kohdeserverillä oleva tunnus, jolla haluat kirjautua, minulla siis root. Jos tunnusta ei ole, niin se täytyy ensin luoda.

 

Kuvan tapauksessa loin Win 1o koneen Ubuntu appsissa SSH-avaimet, joilla pystyn kirjautumaan DigitalOceanin virtuaaliserverille. Mutta se sallii nimenomaan kotikoneesta SSH-yhteyden dropletille, ei päinvastoin.

Käsin siirto

Jos kohde käyttää SSH-avaimia, eikä sen julkista avainta ole laitettu lähtevän serverin tietoihin, eikä voida käyttää ssh-copy-id komentoa, niin se täytyy viedä käsin – se tehdään aivan samoin kuin PuTTY:n avainten kanssa.

cat ~/.ssh/id_rsa.pub

Maalaa ja kopioi.

Siirry kohdeserverille ja avaa julkisten avaimien säilö.

nano ~/.ssh/authorized_keys

Liimaa uudelle riville. Muista, että koko rimpsu täytyy olla yhdellä rivillä.

Tallenna ja SSH toimii (ainakin pitäisi).