Ero sivun ”SSH” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(x forwarding)
p (Lisätty Palvelin-malline)
 
(82 välissä olevaa versiota 40 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
SSH eli Secure SHell on alunperin Tatu Ylösen kehittämä järjestelmä, jolla voidaa ottaa turvallisia yhteyksiä järjestelmästä toiseen. SSH:sta löytyy avoin [[OpenSSH]]-toteutus, joka on peräisin OpenBSD-projektista. [[PuTTY]] on [[X|X:ssä]] toimiva ssh-asiakasohjelma UNIX:eille ja Windowsille.
'''SSH''' eli ''Secure SHell'' on alun perin suomalaisen Tatu Ylösen kehittämä etäkäyttöohjelmisto, jolla voidaan ottaa [[wikipedia:fi:salaus|salattuja]] yhteyksiä järjestelmästä toiseen. SSH:sta löytyy avoin [[OpenSSH]]-toteutus, joka on peräisin [[OpenBSD]]-projektista. [[PuTTY]] on [[X|X:ssä]] toimiva ssh-asiakasohjelma UNIX-järjestelmille ja Windowsille. SSH on käytännössä täysin korvannut käytössä aikaisemman salaamattoman RSH (Remote SHell) -protokollan.


Monissa jakeluissa tulee mukana ssh-asiakasohjelma komentoriville, jolloin ssh-yhteyden voi ottaa palvelimelle yksinhkertaisesti komennolla
SSH-palvelun asentaminen palvelimelle ja konfigurointi käsitellään erillisessä artikkelissa [[sshd]].
  ssh minun.palvelin.net
 
== Peruskäyttö ==
Monissa jakeluissa tulee mukana ssh-asiakasohjelma komentoriville, jolloin ssh-yhteyden voi ottaa palvelimelle yksinkertaisesti komennolla
  ssh minun.palvelin.example
Tällöin kirjautumista yritetään samalla tunnuksella, millä järjestelmään on kirjauduttu sisälle. Muulla tunnuksella yhdistäminen onnistuu seuraavasti
Tällöin kirjautumista yritetään samalla tunnuksella, millä järjestelmään on kirjauduttu sisälle. Muulla tunnuksella yhdistäminen onnistuu seuraavasti
  ssh kayttajatunnus@minun.palvelin.com
  ssh kayttajatunnus@minun.palvelin.example
Jos halutaan ajaa [[X]]-ohjelmia SSH:n kautta on komentoon sisällyttävä parametri <tt>-X</tt>, esimerkiksi näin:
 
  ssh -X guru@linuxburken.firma.se
Mikäli yllä olevan komennon kirjoittaminen toistuvasti tuntuu työläältä, on mahdollista luoda ssh:n asetustiedostoon (<tt>~/.ssh/config</tt>) oma profiili yhteyttä varten. Tämä onnistuu lisäämällä tiedostoon rivit:
Host lyhytnimi minun.palvelin.example
HostName minun.palvelin.example
User kayttajatunnus
Host määrittelee komentoriville syötetyt aliakset, jotka käyttävät tätä profiilia. Yllä olevaa profiilia käytettäessä seuraavat komennot saavat aikaan saman lopputuloksen:
ssh kayttajatunnus@minun.palvelin.example
ssh minun.palvelin.example
ssh lyhytnimi
Mikäli haluat yhdistää avainparilla (keypair) palvelimelle, onnistuu se seuraavalla komennolla
ssh -i /kansio/avain.tiedosto käyttäjänimi@palvelin
 
== SSH-palvelimen perustaminen ==
Jos haluat perustaa palvelimen, johon voi kirjautua SSH:lla, sinun on asennettava SSH-palvelu palvelimelle. Asiaa käsitellään tarkemmin artikkelissa [[sshd]]
 
== Graafiset ohjelmat ==
Jos halutaan ajaa [[X]]-ohjelmia SSH:n kautta on komentoon sisällyttävä parametri <tt>-X</tt> ([[#X:n tietoturva|tietoturvasyistä]] tämä ei yleensä ole oletuksena), esimerkiksi näin:
  ssh -X guru@linuxburken.firma.example
 
Usein erityisesti X-ohjelmien ajossa pullonkaulaksi muodostuu hidas yhteys. Hitaan yhteyden aiheuttamia ongelmia voidaan kompensoida pakkaamalla tiedonsiirto:
ssh -X -C guru@linuxburken.firma.example
 
Jotta graafisten ohjelmien käyttäminen onnistuisi, on sshd:n (etäkoneen) asetustiedostossa (<tt>/etc/ssh/sshd_config</tt>) oltava rivi
ForwardX11 yes
Oletuksena tämä arvo on <tt>no</tt>, vaikkakaan tällä ei ole suurempaa merkitystä ''palvelinkoneen'' turvallisuudelle.
 
Jotta yhteystyö, esimerkiksi tekstin kopioiminen leikepöydän kautta, toimisi normaaliin tapaan paikallisten ja palvelimella ajettavien sovellusten välillä joutuu lisäksi hyväksymään "ForwardX11Trusted", komentorivillä <code>-Y</code>. Sekä tavallinen että varsinkin luotettu X-edelleenohjaus antaa vieraalle koneelle mahdollisuuden käyttää hyväkseen X-sovellusten välistä melko heikkoa tietoturvaa. Katso [[#X:n tietoturva|X:n tietoturva]] alla.
 
Oletusasetukset ForwardX11 ja ForwardX11Trusted voi asettaa tiedostoissa /etc/ssh_config ja /etc/.ssh/config, haluttaessa kone- ja verkkokohtaisesti:
 
Host *.luotettuverkko.example.org,omakone.example.net
  ForwardX11 yes
  ForwardX11Trusted yes
Host muu-x-palvelin.example.com
  ForwardX11 yes
  ForwardX11Trusted no
Host *
  ForwardX11 no
  ForwardX11Trusted no
 
== Yhteyksien uusiokäyttö ==
Mikäli samalle palvelimelle otetaan useampia yhteyksiä, voidaan yhtä yhteyksistä käyttää niin kutsuttuna isäntäyhteytenä, jolloin muut yhteydet otetaan sen kautta. Tällöin salasana on annettava vain kerran isäntäyhteyttä avatessa ja muiden yhteyksien ottaminen hoituu erittäin nopeasti.
 
Isäntäyhteyttä otettaessa ssh:lle on annettava parametri <tt>-M</tt>:
ssh -M mun.palvelin.example
 
Jonka jälkeen toinen yhteys voidaan ottaa tavalliseen tapaan
ssh mun.palvelin.example
Eikä salasanaa enää kysytä.
 
Jotta isäntäyhteyksien käyttö onnistuisi, on ssh:n asetustiedostoon (<tt>~/.ssh/config</tt>) lisättävä rivit
Host *
ControlPath ~/.ssh/ctl-%r-%h-%p
ControlMaster auto
 
Ominaisuus löytyy OpenSSH:n versiosta 4.2 ja sitä uudemmista.
 
== Tunnistaminen avainparilla ==
Salasanatunnistuksen ohella varteenotettava tapa autentikoida yhteys palvelimelle on avainparimenettely. Siinä asiakaskoneella luodaan avainpari, jonka yksityinen osa jätetään omalle koneelle, ja julkinen osa siirretään kaikille niille koneille, joilla avainparitunnistusta halutaan käyttää.
 
*Luodaan avainpari ssh-keygen -ohjelmalla. Mikäli palvelimelle on asennettu vähintään OpenSSH 6.5, voidaan käyttää parempaa elliptiseen käyrään perustuvaa ed25519-algoritmia.
 
ssh-keygen -t ed25519
 
Vanhemmat versiot eivät tue ed25519-algoritmia, joten niiden kanssa joudutaan käyttämään RSA:ta. <tt>-b</tt> -lipulla voidaan valita avaimen pituus, jonka voi RSA:ssa valita mielivaltaisesti 768-16384 (oletus 2048) bitin väliltä.
 
ssh-keygen -t rsa -b 4096
 
<tt>ssh-keygen</tt> ilman parametrejä valitsee tyypillisesti järkevät oletusarvot.
 
*Tässä vaiheessa ssh-keygen kysyy salasanaa avaimelle ja mahdollisesti polkua. Oletuspolkua (~/.ssh/id_rsa) ei yleensä pidä muuttaa, mutta salasana lisää turvallisuutta oleellisesti, jos joku pääsee käsiksi avaintiedostoon. Salasana saa olla mielivaltaisen pitkä. Tiedoston <tt>id_rsa</tt> turvallisuudesta on pidettävä huolta, sillä sen avulla kuka tahansa voi kirjautua käyttämillesi palvelimille tunnuksillasi (murrettuaan mahdollisen salasanan).
*Sitten kopioidaan julkinen osa kaikille palvelimille missä tätä avainparia halutaan hyödyntää. Helpointa on käyttää tähän ssh-copy-id -ohjelmaa, joka tulee useimpien jakeluiden mukana.
ssh-copy-id etäkone
Muita tapoja julkisen osan kopiointiin on esitetty seuraavassa. Huomaa, että <tt>authorized_keys</tt>-tiedostossa jokaisella rivillä määritetään yksi avain. Jos et ole aiemmin käyttänyt tätä menetelmää, tiedostoa ei ole, ja oman julkisen avaimen kopioiminen etäkoneen <tt>authorized_keys</tt>-tiedostoksi ei tuota ongelmia.
[[scp]] ~/.ssh/id_rsa.pub palvelin:/home/kayttaja/.ssh/authorized_keys
Mikäli sinulla on jo ennestään etäkoneessa <tt>~/.ssh/authorized_keys</tt>-tiedosto, voit komentaa näin:
[[cat]] ~/.ssh/id_rsa.pub | ssh käyttäjä@etäkone '[[cat]] >> ~/.ssh/authorized_keys'
 
*Nyt voit kirjautua kaikille palvelimille, joille olet julkisen avaimesi kopioinut käyttämättä palvelimen salasanaa. Salasanan ei siis enää tarvitse olla helposti muistettava &ndash; ja salasanalla kirjautumisen sshd:n kautta voi kieltää kokonaan.
*Käyttäen ohjelmaa ssh-agent säästytään myös avaintiedoston salasanan toistuvalta antamiselta. Avaintiedoston salasana annetaan vain kerran X- tai pääteistunnon alussa. Ssh-agentin voi käynnistää taustalle automaattisesti aina koneen uudelleenkäynnistyksen yhteydessä lisäämällä [[crontab]]:iin rivi:
@reboot ssh-agent -s | grep -v echo > $HOME/.ssh-agent
*Pääteistunnon aluksi annetaan komento:
ssh-add -t 10800
*Seuraavaksi kysytään avaintiedoston salasanaa kerran, minkä jälkeen voit ilman salasanakyselyä kirjautua normaalisti ssh:lla 10800 sekunnin ajan kaikille niille palvelimille, joille olet julkisen avaimesi kopioinut.
 
Jos haluaa kirjautua automaattisesti, esimerkiksi cron-työn yhteydessä, joutuu käyttämään salasanatonta avaintiedostoa. Tähän käyttöön voi luoda rinnakkaisen avaimen, jota pidetään eri tiedostossa (johon viitataan ssh:n vivulla <code>-i</code>) ja avaimen valtuuksia voi rajoittaa laittamalla tiedoston authorized_keys tämän avaimen kohdalle rivin alkuun "optioita", esimerkiksi (huomaa pilkkujen, lainausmerkkien ja välilyöntien käyttö):
from="*.kotiverkko.example.org,työkoneeni.example.com",no-port-forwarding,no-X11-forwarding jatässäitsejulkinenavainkaikkinensa
 
''HUOM! Jos SSH-palvelimella on [[eCryptfs]]:llä salatut kotihakemistot, joutuu SSH joka tapauksessa aina kysymään salasanaasi, koska sitä tarvitaan kotihakemiston salauksen avaamiseen.''
 
== Tunneli ==
SSH:n avulla voi tunneloida minkä tahansa TCP-portin käytettäväksi verkon yli. Tämä tapahtuu sovelluksille läpinäkyvästi, joten se tarjoaa hienon mahdollisuuden parantaa &ndash; tai huonontaa &ndash; tietoturvaa tilanteissa, joissa tietyn sovelluksen muokkaaminen ei ole mahdollista tai käytännöllistä.
 
Tässä esitellään yksittäisten porttien ohjausta SSH-yhteyden kautta. Tämä riittää yksinkertaisimmissa tapauksissa. IP-tunnelien muodostaminen SSH-yhteyden kautta on myös mahdollista. Lisätietoja asiasta saatavilla artikkelissa [[SSH-tunneli]].
 
Seuraavassa esimerkissä tunneloidaan paikallisen koneen ([[localhost]]) portti <tt>6060</tt> SSH:lla niin, että sen kautta voi käyttää etäkoneen porttia <tt>23</tt>.
ssh -L 6060:localhost:23 etäkone
Ottamalla nyt yhteyden paikallisella koneella porttiin <tt>6060</tt>, yhteys ohjautuu SSH-tunnelin yli etäkoneen porttiin <tt>23</tt>, [[telnet]].
 
 
Tunnelia ei ole pakko tehdä localhostiin, vaan mikä tahansa kone käy. Näin voit esimerkiksi päästä käsiksi sisäverkkoihin, joihin et suoraan Internetistä pääse. Esimerkki:
ssh example.com -L 123:192.168.6.12:1337 -N
 
Tässä esimerkissä otat siis ssh-yhteyden palvelimelle example.com, johon sinulla on tunnus ja pääsy. Example.com-palvelimella SSH-palvelin tunneloi yhteyden sisäverkon koneelle 192.168.6.12 ja portille 1337, johon ei normaalisti ole ulkoa pääsyä. N-vipu estää komentotulkkiin siirtymisen ja jättää ssh:n tilaan, jossa salasanakyselyn jälkeen ei näytä tapahtuvan mitään.
 
Tämän jälkeen voisit jollakin ohjelmalla ottaa yhteyttä osoitteeseen ja porttiin localhost:123 ja tunnelin ansiosta siinä vastaisikin sisäverkon koneen portti 1337. Kun olet valmis, katkaise SSH-istunto näppäinyhdistelmällä Ctrl+C.
 
=== WWW-selaimen tunnelointi ===
OpenSSH:ssa on myös sisäänrakennettu socks palvelin, jonka avulla WWW-selaimen liikenne voidaan helposti tunneloida ilman ylimääräistä ohjelmistoa.
 
Esimerkki:
ssh -D 8080 kayttaja@palvelin.fi
 
Tunnelin luomisen jälkeen selaimen SOCKS v4 välityspalvelimen osoitteeksi asetetaan localhost (joissain selaimissa käytettävä ip-osoitetta 127.0.0.1) ja portiksi esimerkin tapauksessa 8080. On huomattava, että selaimen lisäosat eivät välttämättä kunnioita selaimen välityspalvelin asetuksia, jonka vuoksi esim. [[Yle Areena]]n käyttö ei onnistu tällä järjestelyllä ulkomailta. Siitä huolimatta tunnelointi parantaa huomattavasti tietoturvaa käytettäessä avoimia langattomia verkkoja. Tietoturvaa voi parantaa estämällä [[palomuuri|palomuurilla]] liikenteen ulospäin, näin ei voi vahingossakaan käyttää Internetiä turvattomasti tunnelin ohi.
 
=== Käänteinen tunneli ===
Käänteisen tunnelin idea on sama kuin normaalinkin tunnelin, mutta se käynnistetään toisesta päästä. Käänteinen tunneli mahdollistaa vaikkapa palomuurin takana olevan koneen etäylläpidon. Seuraavassa esimerkissä tunneloidaan paikallisen koneen portti <tt>23</tt> SSH:lla niin, että se on käytettävissä etäkoneelta portissa <tt>1337</tt>.
ssh -R 1337:localhost:23 etäkone
 
Ottamalla nyt yhteyden etäkoneella porttiin <tt>1337</tt>, yhteys ohjautuu SSH-tunnelin ja mahdollisen palomuurin läpi paikalliselle koneelle porttiin <tt>23</tt>.
 
Huomio tunneleita rakentaessasi, että kuuntelevan [[pistoke|pistokkeen]] (engl. socket) asettaminen porttia <tt>1024</tt> alhaisempien portteihin vaatii kyseisessä järjestelmässä [[root]]-oikeudet.
 
==Tietoturva==
SSH-yhteys on salattu, mutta ei pidä tuudittautua valheellisen turvallisuuden tunteeseen, sillä erilaisia hyökkäyskeinoja on olemassa. Lue artikkelista [[SSH-turvatoimet]] vinkkejä SSH-palvelimesi turvaamiseen.
 
Salaus auttaa siihen, ettei verkkoa passiivisesti salakuunteleva pysty seuraamaan liikennettä ja ettei sitä pystytä muokkaamaan. Edellinen voi myös olla tietoturvaongelma, sillä yrityksen palomuurikaan ei pysty erottamaan ongelmallista liikennettä sallittusta.
 
===Koneiden avaimet===
 
SSH estää koneitten avainten avulla vieraan koneen esiintymisen luotettuna palvelimena (nimipalvelinhyökkäysten tms. avulla). ssh varoittaa, jos avaimet eivät täsmää. Varoituksesta ei ole hyötyä, jos siitä ei välitä, joten on oleellista kopioida koneitten avaimet /etc/ssh_host*_key.pub omalle koneelle tiedostoon /etc/ssh/ssh_known_hosts tai ~/.ssh/known_hosts.
Avainriville pitää lisätä myös koneesta mahdollisesti käytettävät aliakset
kone.example.com,kone,alias,alias.example.com,192.168.0.1 itseavainkaikkinensa
 
Varoituksen yhteydessä ssh kertoo koneen avaimen "sormenjäljen", jonka voi verrata oikean avaimen sormenjälkeen jopa puhelimitse. Jos vain yhden koneen kanssa on ongelmia, ssh-yhteyden voi ottaa toiselle koneelle toiseen verkkoon ja yrittää yhteyttä sitä kautta. Jos tältä koneelta katsottuna vieraan koneen sormenjälki on sama kuin omastakin koneesta katsottuna, kyseessä ei ole paikallinen nimipalvelinhuijaus.
 
===Murtautuminen===
 
Se, että ssh-liikenne on salattua, ei estä murtautumasta ssh-palvelimen kautta suoraan. Itse palvelimessa ei ole ollut kovin paljon reikiä, mutta heikkoja salasanoja voi hyödyntää ssh-palvelimen kautta. Joissakin [[jakelu]]issa palvelin on oletuksena päällä, koska koneita on tarkoitettu etäylläpidettäviksi. Tällöin on tärkeää rajoittaa miltä koneilta ja mille tunnuksille ssh:lla pystyy kirjautumaan ja varmistamaan, että näillä tunnuksilla on hyvät salasanat &ndash; ellei salasanalla kirjautumista ssh:lla estetä kokonaan (katso [[#Tunnistaminen avainparilla|tunnistaminen avainpareilla]] yllä).
 
Katso myös [[SSH-turvatoimet]].
 
===X:n tietoturva===
 
Samalla [[X]]-palvelimella ajettavat ohjelmat luottavat yleensä toisiinsa ja X-palvelin luottaa ohjelmiin. Jos ohjelma niin haluaa se pystyy esimerkiksi valtaamaan leikepöydän juuri ennen sen sisällön kopioimista komentoriville ja siten ajamaan mielivaltaisia komentoja, tai luomaan läpinäkyvän näytön kokoisen ikkunan ja sen kautta salakuuntelemaan näppäimistöä. Tämä ei yleensä ole ongelma, sillä jos jokin ajettava ohjelma on trojan hevonen, se pystyy myös käyttämään tunnuksen oikeuksia suoraan. Verkon yli ajettaessa yhdellä koneella vallatulla tunnuksella voi kuitenkin murtautua myös samaa X-palvelinta käyttäville muille koneille.
 
Jotta voisi käyttää myös heikomman tietoturvan koneita tai koneita, joiden ylläpitoon ei luota, ssh ei yleensä pyytämättä anna toisella koneella ajettavien ohjelmien käyttää paikallista X-palvelinta. Nykyisissä X-palvelimissa on myös mahdollista rajoittaa X:n käyttöä niin, että jotkut, tässä tilanteessa erityisen vaarallisiksi huomatut toiminnot eivät ole vieraan ohjelman käytettävissä.
 
Jos etäyhteydessä ei ole tarkoituksena ajaa graafisia ohjelmia, X-yhteyttä ei siis kannata muodostaa. Jos käyttää graafisia ohjelmia, mutta epäilee etäkoneen tietoturvaa, X:n voi sallia vain kohtuullisen turvaallisesti koetuin osin.
ssh -x kone-ilman-x-ohjelmia.example.org
ssh -X kone-jossa-x-ohjelmia.example.org
ssh -Y kone-johon-luottaa.example.org
 
==SSH välityspalvelimen läpi==
SSH-yhteydet voidaan myös yhdistää HTTP-välityspalvelimen, kuten [[Squid]]in läpi. Seuraava asetus vaatii Corkscrew-ohjelman, joka löytyy useimpien jakelupakettien ohjelmavarastosta.
 
Lisää <tt>~/.ssh/config</tt>-tiedostoon seuraavat rivit vaihtaen <tt>cache.palvel.in 8080</tt>:n joksikin muuksi:
<pre>Host *
  ProxyCommand corkscrew cache.palvel.in 8080 %h %p</pre>
Jos haluat esimerkiksi vain fi-, org- ja net-domainit menemään välityspalvelimen läpi, muuta Host-asetus <tt>*</tt>:n sijasta <tt>*.fi *.org *.net</tt>:ksi.
 
==Käyttöesimerkki: varakopiot verkon yli==
Varakopioi kotisivusi toisen koneen kotihakemistosta ssh:lla. Tähän käyttötarkoitukseen [[rsync]] tai [[rdiff-backup]] sopivat kylläkin huomattavasti paremmin.
 
  ssh toinen.kone.fi 'cd public_html && tar -cjvf - .' | cat > kotisivut.tar.bz2
 
Palauta hakemistorakenne takaisin
 
  cat kotisivut.tar.bz2 | ssh toinen.kone.fi 'cd public_html && tar xjvf -'
 
Vastaava [[Varmuuskopiointi#Rsync|perusteellisempi esimerkki]] löytyy artikkelissa varmuuskopioinnista.
 
==Käyttöesimerkki: graafinen VNC-yhteys kahden palomuurin takana olevan koneen välille ==
Koneet A ja B ovat [[palomuuri]]en takana, kone C ei. Tarkoituksena nähdä koneen A näytöllä koneen B näytön näkymä [[VNC#Yhdist.C3.A4minen_olemassaolevaan_X-istuntoon|VNC-yhteyden]]  yli.
 
Kone A ottaa ensiksi yhteyden koneeseen C, tunneloiden koneen C portin 5903 paikalliseen porttiin 5904:
  ssh ckayttaja@ckone.com -L 5904:localhost:5903
 
Tämän jälkeen kone B ottaa yhteyden koneeseen C. Tunneloiden koneen C portti 8001 koneen B porttiin 22 (SSH):
  ssh -R 8001:localhost:22 ckayttaja@ckone.com
 
Tämän jälkeen käyttäjä A ottaa koneelta C yhteyden koneeseen B. Tunneloiden koneen B portin 5900(VNC) koneen C porttiin 5903:
  ssh bkayttaja@localhost -p 8001 -L 5903:localhost:5900
 
Nyt A käynnistää VNC:n koneen B porttiin 5900
  x11vnc
 
Ja tämä B-koneen portti 5900 tunneloituu noin neljän portin läpi koneen A porttiin 5904, jolloin A saa VNC:n käyntiin:
  vncviewer localhost:5904
 
==Katso myös==
*[[SSH-turvatoimet]]
*[[sshd]]
*[[ClusterSSH]]
*[[SFTP]]
*[[SCP]]
*[[Telnet]]
*[[HST]] - Henkilökortin varmenteiden käyttö.


==Linkkejä==
==Aiheesta muualla==
* [[wikipedia:fi:SSH|SSH Wikipediassa]]
* [[wikipedia:fi:SSH|SSH Wikipediassa]]
* [[wikibooks:fi:SSH|SSH Wikikirjastossa]]
* [http://www.openssh.com/ OpenSSH]
* [http://www.openssh.com/ OpenSSH]
* [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY]
* [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY]


[[Luokka:Tietoturva]][[Luokka:Käsitteet]]
[[Luokka:Etäkäyttö]]
[[Luokka:Verkko]]
[[Luokka:Palvelimet]]
[[Luokka:Tietoturva]]
[[Luokka:Komentorivin erikoisohjelmat]]
{{Malline:Palvelin}}

Nykyinen versio 1. tammikuuta 2019 kello 22.32

SSH eli Secure SHell on alun perin suomalaisen Tatu Ylösen kehittämä etäkäyttöohjelmisto, jolla voidaan ottaa salattuja yhteyksiä järjestelmästä toiseen. SSH:sta löytyy avoin OpenSSH-toteutus, joka on peräisin OpenBSD-projektista. PuTTY on X:ssä toimiva ssh-asiakasohjelma UNIX-järjestelmille ja Windowsille. SSH on käytännössä täysin korvannut käytössä aikaisemman salaamattoman RSH (Remote SHell) -protokollan.

SSH-palvelun asentaminen palvelimelle ja konfigurointi käsitellään erillisessä artikkelissa sshd.

Peruskäyttö[muokkaa]

Monissa jakeluissa tulee mukana ssh-asiakasohjelma komentoriville, jolloin ssh-yhteyden voi ottaa palvelimelle yksinkertaisesti komennolla

ssh minun.palvelin.example

Tällöin kirjautumista yritetään samalla tunnuksella, millä järjestelmään on kirjauduttu sisälle. Muulla tunnuksella yhdistäminen onnistuu seuraavasti

ssh kayttajatunnus@minun.palvelin.example

Mikäli yllä olevan komennon kirjoittaminen toistuvasti tuntuu työläältä, on mahdollista luoda ssh:n asetustiedostoon (~/.ssh/config) oma profiili yhteyttä varten. Tämä onnistuu lisäämällä tiedostoon rivit:

Host lyhytnimi minun.palvelin.example
HostName minun.palvelin.example
User kayttajatunnus

Host määrittelee komentoriville syötetyt aliakset, jotka käyttävät tätä profiilia. Yllä olevaa profiilia käytettäessä seuraavat komennot saavat aikaan saman lopputuloksen:

ssh kayttajatunnus@minun.palvelin.example
ssh minun.palvelin.example
ssh lyhytnimi

Mikäli haluat yhdistää avainparilla (keypair) palvelimelle, onnistuu se seuraavalla komennolla

ssh -i /kansio/avain.tiedosto käyttäjänimi@palvelin

SSH-palvelimen perustaminen[muokkaa]

Jos haluat perustaa palvelimen, johon voi kirjautua SSH:lla, sinun on asennettava SSH-palvelu palvelimelle. Asiaa käsitellään tarkemmin artikkelissa sshd

Graafiset ohjelmat[muokkaa]

Jos halutaan ajaa X-ohjelmia SSH:n kautta on komentoon sisällyttävä parametri -X (tietoturvasyistä tämä ei yleensä ole oletuksena), esimerkiksi näin:

ssh -X guru@linuxburken.firma.example

Usein erityisesti X-ohjelmien ajossa pullonkaulaksi muodostuu hidas yhteys. Hitaan yhteyden aiheuttamia ongelmia voidaan kompensoida pakkaamalla tiedonsiirto:

ssh -X -C guru@linuxburken.firma.example

Jotta graafisten ohjelmien käyttäminen onnistuisi, on sshd:n (etäkoneen) asetustiedostossa (/etc/ssh/sshd_config) oltava rivi

ForwardX11 yes

Oletuksena tämä arvo on no, vaikkakaan tällä ei ole suurempaa merkitystä palvelinkoneen turvallisuudelle.

Jotta yhteystyö, esimerkiksi tekstin kopioiminen leikepöydän kautta, toimisi normaaliin tapaan paikallisten ja palvelimella ajettavien sovellusten välillä joutuu lisäksi hyväksymään "ForwardX11Trusted", komentorivillä -Y. Sekä tavallinen että varsinkin luotettu X-edelleenohjaus antaa vieraalle koneelle mahdollisuuden käyttää hyväkseen X-sovellusten välistä melko heikkoa tietoturvaa. Katso X:n tietoturva alla.

Oletusasetukset ForwardX11 ja ForwardX11Trusted voi asettaa tiedostoissa /etc/ssh_config ja /etc/.ssh/config, haluttaessa kone- ja verkkokohtaisesti:

Host *.luotettuverkko.example.org,omakone.example.net
  ForwardX11 yes
  ForwardX11Trusted yes
Host muu-x-palvelin.example.com
  ForwardX11 yes
  ForwardX11Trusted no
Host *
  ForwardX11 no
  ForwardX11Trusted no

Yhteyksien uusiokäyttö[muokkaa]

Mikäli samalle palvelimelle otetaan useampia yhteyksiä, voidaan yhtä yhteyksistä käyttää niin kutsuttuna isäntäyhteytenä, jolloin muut yhteydet otetaan sen kautta. Tällöin salasana on annettava vain kerran isäntäyhteyttä avatessa ja muiden yhteyksien ottaminen hoituu erittäin nopeasti.

Isäntäyhteyttä otettaessa ssh:lle on annettava parametri -M:

ssh -M mun.palvelin.example

Jonka jälkeen toinen yhteys voidaan ottaa tavalliseen tapaan

ssh mun.palvelin.example

Eikä salasanaa enää kysytä.

Jotta isäntäyhteyksien käyttö onnistuisi, on ssh:n asetustiedostoon (~/.ssh/config) lisättävä rivit

Host * 
ControlPath ~/.ssh/ctl-%r-%h-%p 
ControlMaster auto 

Ominaisuus löytyy OpenSSH:n versiosta 4.2 ja sitä uudemmista.

Tunnistaminen avainparilla[muokkaa]

Salasanatunnistuksen ohella varteenotettava tapa autentikoida yhteys palvelimelle on avainparimenettely. Siinä asiakaskoneella luodaan avainpari, jonka yksityinen osa jätetään omalle koneelle, ja julkinen osa siirretään kaikille niille koneille, joilla avainparitunnistusta halutaan käyttää.

  • Luodaan avainpari ssh-keygen -ohjelmalla. Mikäli palvelimelle on asennettu vähintään OpenSSH 6.5, voidaan käyttää parempaa elliptiseen käyrään perustuvaa ed25519-algoritmia.
ssh-keygen -t ed25519

Vanhemmat versiot eivät tue ed25519-algoritmia, joten niiden kanssa joudutaan käyttämään RSA:ta. -b -lipulla voidaan valita avaimen pituus, jonka voi RSA:ssa valita mielivaltaisesti 768-16384 (oletus 2048) bitin väliltä.

ssh-keygen -t rsa -b 4096

ssh-keygen ilman parametrejä valitsee tyypillisesti järkevät oletusarvot.

  • Tässä vaiheessa ssh-keygen kysyy salasanaa avaimelle ja mahdollisesti polkua. Oletuspolkua (~/.ssh/id_rsa) ei yleensä pidä muuttaa, mutta salasana lisää turvallisuutta oleellisesti, jos joku pääsee käsiksi avaintiedostoon. Salasana saa olla mielivaltaisen pitkä. Tiedoston id_rsa turvallisuudesta on pidettävä huolta, sillä sen avulla kuka tahansa voi kirjautua käyttämillesi palvelimille tunnuksillasi (murrettuaan mahdollisen salasanan).
  • Sitten kopioidaan julkinen osa kaikille palvelimille missä tätä avainparia halutaan hyödyntää. Helpointa on käyttää tähän ssh-copy-id -ohjelmaa, joka tulee useimpien jakeluiden mukana.
ssh-copy-id etäkone

Muita tapoja julkisen osan kopiointiin on esitetty seuraavassa. Huomaa, että authorized_keys-tiedostossa jokaisella rivillä määritetään yksi avain. Jos et ole aiemmin käyttänyt tätä menetelmää, tiedostoa ei ole, ja oman julkisen avaimen kopioiminen etäkoneen authorized_keys-tiedostoksi ei tuota ongelmia.

scp ~/.ssh/id_rsa.pub palvelin:/home/kayttaja/.ssh/authorized_keys

Mikäli sinulla on jo ennestään etäkoneessa ~/.ssh/authorized_keys-tiedosto, voit komentaa näin:

cat ~/.ssh/id_rsa.pub | ssh käyttäjä@etäkone 'cat >> ~/.ssh/authorized_keys'
  • Nyt voit kirjautua kaikille palvelimille, joille olet julkisen avaimesi kopioinut käyttämättä palvelimen salasanaa. Salasanan ei siis enää tarvitse olla helposti muistettava – ja salasanalla kirjautumisen sshd:n kautta voi kieltää kokonaan.
  • Käyttäen ohjelmaa ssh-agent säästytään myös avaintiedoston salasanan toistuvalta antamiselta. Avaintiedoston salasana annetaan vain kerran X- tai pääteistunnon alussa. Ssh-agentin voi käynnistää taustalle automaattisesti aina koneen uudelleenkäynnistyksen yhteydessä lisäämällä crontab:iin rivi:
@reboot ssh-agent -s | grep -v echo > $HOME/.ssh-agent
  • Pääteistunnon aluksi annetaan komento:
ssh-add -t 10800
  • Seuraavaksi kysytään avaintiedoston salasanaa kerran, minkä jälkeen voit ilman salasanakyselyä kirjautua normaalisti ssh:lla 10800 sekunnin ajan kaikille niille palvelimille, joille olet julkisen avaimesi kopioinut.

Jos haluaa kirjautua automaattisesti, esimerkiksi cron-työn yhteydessä, joutuu käyttämään salasanatonta avaintiedostoa. Tähän käyttöön voi luoda rinnakkaisen avaimen, jota pidetään eri tiedostossa (johon viitataan ssh:n vivulla -i) ja avaimen valtuuksia voi rajoittaa laittamalla tiedoston authorized_keys tämän avaimen kohdalle rivin alkuun "optioita", esimerkiksi (huomaa pilkkujen, lainausmerkkien ja välilyöntien käyttö):

from="*.kotiverkko.example.org,työkoneeni.example.com",no-port-forwarding,no-X11-forwarding jatässäitsejulkinenavainkaikkinensa

HUOM! Jos SSH-palvelimella on eCryptfs:llä salatut kotihakemistot, joutuu SSH joka tapauksessa aina kysymään salasanaasi, koska sitä tarvitaan kotihakemiston salauksen avaamiseen.

Tunneli[muokkaa]

SSH:n avulla voi tunneloida minkä tahansa TCP-portin käytettäväksi verkon yli. Tämä tapahtuu sovelluksille läpinäkyvästi, joten se tarjoaa hienon mahdollisuuden parantaa – tai huonontaa – tietoturvaa tilanteissa, joissa tietyn sovelluksen muokkaaminen ei ole mahdollista tai käytännöllistä.

Tässä esitellään yksittäisten porttien ohjausta SSH-yhteyden kautta. Tämä riittää yksinkertaisimmissa tapauksissa. IP-tunnelien muodostaminen SSH-yhteyden kautta on myös mahdollista. Lisätietoja asiasta saatavilla artikkelissa SSH-tunneli.

Seuraavassa esimerkissä tunneloidaan paikallisen koneen (localhost) portti 6060 SSH:lla niin, että sen kautta voi käyttää etäkoneen porttia 23.

ssh -L 6060:localhost:23 etäkone

Ottamalla nyt yhteyden paikallisella koneella porttiin 6060, yhteys ohjautuu SSH-tunnelin yli etäkoneen porttiin 23, telnet.


Tunnelia ei ole pakko tehdä localhostiin, vaan mikä tahansa kone käy. Näin voit esimerkiksi päästä käsiksi sisäverkkoihin, joihin et suoraan Internetistä pääse. Esimerkki:

ssh example.com -L 123:192.168.6.12:1337 -N

Tässä esimerkissä otat siis ssh-yhteyden palvelimelle example.com, johon sinulla on tunnus ja pääsy. Example.com-palvelimella SSH-palvelin tunneloi yhteyden sisäverkon koneelle 192.168.6.12 ja portille 1337, johon ei normaalisti ole ulkoa pääsyä. N-vipu estää komentotulkkiin siirtymisen ja jättää ssh:n tilaan, jossa salasanakyselyn jälkeen ei näytä tapahtuvan mitään.

Tämän jälkeen voisit jollakin ohjelmalla ottaa yhteyttä osoitteeseen ja porttiin localhost:123 ja tunnelin ansiosta siinä vastaisikin sisäverkon koneen portti 1337. Kun olet valmis, katkaise SSH-istunto näppäinyhdistelmällä Ctrl+C.

WWW-selaimen tunnelointi[muokkaa]

OpenSSH:ssa on myös sisäänrakennettu socks palvelin, jonka avulla WWW-selaimen liikenne voidaan helposti tunneloida ilman ylimääräistä ohjelmistoa.

Esimerkki:

ssh -D 8080 kayttaja@palvelin.fi

Tunnelin luomisen jälkeen selaimen SOCKS v4 välityspalvelimen osoitteeksi asetetaan localhost (joissain selaimissa käytettävä ip-osoitetta 127.0.0.1) ja portiksi esimerkin tapauksessa 8080. On huomattava, että selaimen lisäosat eivät välttämättä kunnioita selaimen välityspalvelin asetuksia, jonka vuoksi esim. Yle Areenan käyttö ei onnistu tällä järjestelyllä ulkomailta. Siitä huolimatta tunnelointi parantaa huomattavasti tietoturvaa käytettäessä avoimia langattomia verkkoja. Tietoturvaa voi parantaa estämällä palomuurilla liikenteen ulospäin, näin ei voi vahingossakaan käyttää Internetiä turvattomasti tunnelin ohi.

Käänteinen tunneli[muokkaa]

Käänteisen tunnelin idea on sama kuin normaalinkin tunnelin, mutta se käynnistetään toisesta päästä. Käänteinen tunneli mahdollistaa vaikkapa palomuurin takana olevan koneen etäylläpidon. Seuraavassa esimerkissä tunneloidaan paikallisen koneen portti 23 SSH:lla niin, että se on käytettävissä etäkoneelta portissa 1337.

ssh -R 1337:localhost:23 etäkone

Ottamalla nyt yhteyden etäkoneella porttiin 1337, yhteys ohjautuu SSH-tunnelin ja mahdollisen palomuurin läpi paikalliselle koneelle porttiin 23.

Huomio tunneleita rakentaessasi, että kuuntelevan pistokkeen (engl. socket) asettaminen porttia 1024 alhaisempien portteihin vaatii kyseisessä järjestelmässä root-oikeudet.

Tietoturva[muokkaa]

SSH-yhteys on salattu, mutta ei pidä tuudittautua valheellisen turvallisuuden tunteeseen, sillä erilaisia hyökkäyskeinoja on olemassa. Lue artikkelista SSH-turvatoimet vinkkejä SSH-palvelimesi turvaamiseen.

Salaus auttaa siihen, ettei verkkoa passiivisesti salakuunteleva pysty seuraamaan liikennettä ja ettei sitä pystytä muokkaamaan. Edellinen voi myös olla tietoturvaongelma, sillä yrityksen palomuurikaan ei pysty erottamaan ongelmallista liikennettä sallittusta.

Koneiden avaimet[muokkaa]

SSH estää koneitten avainten avulla vieraan koneen esiintymisen luotettuna palvelimena (nimipalvelinhyökkäysten tms. avulla). ssh varoittaa, jos avaimet eivät täsmää. Varoituksesta ei ole hyötyä, jos siitä ei välitä, joten on oleellista kopioida koneitten avaimet /etc/ssh_host*_key.pub omalle koneelle tiedostoon /etc/ssh/ssh_known_hosts tai ~/.ssh/known_hosts. Avainriville pitää lisätä myös koneesta mahdollisesti käytettävät aliakset

kone.example.com,kone,alias,alias.example.com,192.168.0.1 itseavainkaikkinensa

Varoituksen yhteydessä ssh kertoo koneen avaimen "sormenjäljen", jonka voi verrata oikean avaimen sormenjälkeen jopa puhelimitse. Jos vain yhden koneen kanssa on ongelmia, ssh-yhteyden voi ottaa toiselle koneelle toiseen verkkoon ja yrittää yhteyttä sitä kautta. Jos tältä koneelta katsottuna vieraan koneen sormenjälki on sama kuin omastakin koneesta katsottuna, kyseessä ei ole paikallinen nimipalvelinhuijaus.

Murtautuminen[muokkaa]

Se, että ssh-liikenne on salattua, ei estä murtautumasta ssh-palvelimen kautta suoraan. Itse palvelimessa ei ole ollut kovin paljon reikiä, mutta heikkoja salasanoja voi hyödyntää ssh-palvelimen kautta. Joissakin jakeluissa palvelin on oletuksena päällä, koska koneita on tarkoitettu etäylläpidettäviksi. Tällöin on tärkeää rajoittaa miltä koneilta ja mille tunnuksille ssh:lla pystyy kirjautumaan ja varmistamaan, että näillä tunnuksilla on hyvät salasanat – ellei salasanalla kirjautumista ssh:lla estetä kokonaan (katso tunnistaminen avainpareilla yllä).

Katso myös SSH-turvatoimet.

X:n tietoturva[muokkaa]

Samalla X-palvelimella ajettavat ohjelmat luottavat yleensä toisiinsa ja X-palvelin luottaa ohjelmiin. Jos ohjelma niin haluaa se pystyy esimerkiksi valtaamaan leikepöydän juuri ennen sen sisällön kopioimista komentoriville ja siten ajamaan mielivaltaisia komentoja, tai luomaan läpinäkyvän näytön kokoisen ikkunan ja sen kautta salakuuntelemaan näppäimistöä. Tämä ei yleensä ole ongelma, sillä jos jokin ajettava ohjelma on trojan hevonen, se pystyy myös käyttämään tunnuksen oikeuksia suoraan. Verkon yli ajettaessa yhdellä koneella vallatulla tunnuksella voi kuitenkin murtautua myös samaa X-palvelinta käyttäville muille koneille.

Jotta voisi käyttää myös heikomman tietoturvan koneita tai koneita, joiden ylläpitoon ei luota, ssh ei yleensä pyytämättä anna toisella koneella ajettavien ohjelmien käyttää paikallista X-palvelinta. Nykyisissä X-palvelimissa on myös mahdollista rajoittaa X:n käyttöä niin, että jotkut, tässä tilanteessa erityisen vaarallisiksi huomatut toiminnot eivät ole vieraan ohjelman käytettävissä.

Jos etäyhteydessä ei ole tarkoituksena ajaa graafisia ohjelmia, X-yhteyttä ei siis kannata muodostaa. Jos käyttää graafisia ohjelmia, mutta epäilee etäkoneen tietoturvaa, X:n voi sallia vain kohtuullisen turvaallisesti koetuin osin.

ssh -x kone-ilman-x-ohjelmia.example.org
ssh -X kone-jossa-x-ohjelmia.example.org
ssh -Y kone-johon-luottaa.example.org

SSH välityspalvelimen läpi[muokkaa]

SSH-yhteydet voidaan myös yhdistää HTTP-välityspalvelimen, kuten Squidin läpi. Seuraava asetus vaatii Corkscrew-ohjelman, joka löytyy useimpien jakelupakettien ohjelmavarastosta.

Lisää ~/.ssh/config-tiedostoon seuraavat rivit vaihtaen cache.palvel.in 8080:n joksikin muuksi:

Host *
  ProxyCommand corkscrew cache.palvel.in 8080 %h %p

Jos haluat esimerkiksi vain fi-, org- ja net-domainit menemään välityspalvelimen läpi, muuta Host-asetus *:n sijasta *.fi *.org *.net:ksi.

Käyttöesimerkki: varakopiot verkon yli[muokkaa]

Varakopioi kotisivusi toisen koneen kotihakemistosta ssh:lla. Tähän käyttötarkoitukseen rsync tai rdiff-backup sopivat kylläkin huomattavasti paremmin.

 ssh toinen.kone.fi 'cd public_html && tar -cjvf - .' | cat > kotisivut.tar.bz2

Palauta hakemistorakenne takaisin

 cat kotisivut.tar.bz2 | ssh toinen.kone.fi 'cd public_html && tar xjvf -'

Vastaava perusteellisempi esimerkki löytyy artikkelissa varmuuskopioinnista.

Käyttöesimerkki: graafinen VNC-yhteys kahden palomuurin takana olevan koneen välille[muokkaa]

Koneet A ja B ovat palomuurien takana, kone C ei. Tarkoituksena nähdä koneen A näytöllä koneen B näytön näkymä VNC-yhteyden yli.

Kone A ottaa ensiksi yhteyden koneeseen C, tunneloiden koneen C portin 5903 paikalliseen porttiin 5904:

 ssh ckayttaja@ckone.com -L 5904:localhost:5903

Tämän jälkeen kone B ottaa yhteyden koneeseen C. Tunneloiden koneen C portti 8001 koneen B porttiin 22 (SSH):

 ssh -R 8001:localhost:22 ckayttaja@ckone.com

Tämän jälkeen käyttäjä A ottaa koneelta C yhteyden koneeseen B. Tunneloiden koneen B portin 5900(VNC) koneen C porttiin 5903:

 ssh bkayttaja@localhost -p 8001 -L 5903:localhost:5900

Nyt A käynnistää VNC:n koneen B porttiin 5900

 x11vnc

Ja tämä B-koneen portti 5900 tunneloituu noin neljän portin läpi koneen A porttiin 5904, jolloin A saa VNC:n käyntiin:

 vncviewer localhost:5904

Katso myös[muokkaa]

Aiheesta muualla[muokkaa]

v  k  m
Palvelin
 Ylläpito  SSH | Tietoturva | Käyttäjien hallinta | Systemd | iptables | Security-Enhanced Linux | AppArmor
 Palvelintyypit  Web-palvelin | Sähköposti | Tietokanta | NFS | Samba
 Komentorivi  Komentorivin perusteet | Komentorivikomennot | Bash-skriptaus
 Tekstieditoreja  nano | vi | emacs
Palvelin-luokka