Ylläpidon huomautus, tämä ketju käsittelee ohjetta joka nykyään on wikissä: http://wiki.ubuntu-fi.org/Wiki/ssh-palvelinvaikka toimenpide on aika triviaali, ajattelin kirjoittaa pienen HOWTO:n ssh ja sftp -palvelimen asentamisesta.
ssh:hän on tietoturvaltaan erittäin hyvä tapa ottaa etäyhteyksiä. sftp puolestaan on tarkoitettu tiedonsiirtoon aivan kuten ftp, mutta se käyttää yhteyden (ja yhteydenoton) salaamiseen ssh:n tarjoamaan turvaa. tosin myös ssh:iä kannattaa käyttää versiota 2 jonka mukana tuo sftp:kin tuli, aikaisemman version yhteydessä sftp:n tilalla käytettiin vähän vähemmän toiminnallisuutta tarjoavaa scp:ä.
(lähes) jokaisen linuxin mukana asentuu ssc-client, jota voi käyttää yhteydenottoon ssh-palvelimen kanssa, windowsille yksi parhaista clienteista on putty joka emuloi myös kunnollista terminaalia.
tiedostojen siirtoon tarkoitetulle sftp:lle on niin ikään asennettu oletuksena komentoriviltä toimiva client nimeltään
sftp. graafisella puolella sftp:tä tukevat linuxissa ainakin
gftp ja Gnomen ja KDE:n file managerit (
nautilus ja
konqueror). windowsissa puolestaan hommaan pystyy komentoriviltä putty:n sftp-client
psftp ja graafisella puolella ainakin
WinSCP ja
Filezilla.
toki ssh taipuu muuhunkin, sen avulla/kautta voi mm. forwardata portteja toiselle koneelle tai ajaa X-ohjelmia etäkoneella siten, että sovelluksen graafinen ikkuna näkyy kuitenkin sinun työpöydälläsi. näistä ehkä myöhemmin, ellei joku muu ehdi ensin.
eli, itse serverin asentaminen on näinkin yksinkertaista:
# apt-get install openssh-server
serveri käynnistyy samalla kuin se asennetaan, joten siihen voi heti yrittää
ottaa yhteyttä joko ssh:llä tai sftp:lla.
mutta, mutta... nythän kuka tahansa joka näkee koneen ulkoisen IP:n pystyy yrittämään koneelle sisään arvaamalla käyttäjätunnuksen ja salasanan. itseasiassa minunkin palvelimelleni tulee jatkuvasti matojen kolkutteluja ssh-porttiin ja epäonnistuneita login-yrityksiä on logissa vaikka muille jakaa.
Ubuntussa ei onneksi ole rootin tiliä aktivoituna, joten siihen kohdistuvat yritykset ovat luonnollisesti turhia. muutenkin nuo madot yrittävät yleensä arvailla englantilaisia erisnimiä, joten suomalaisilla koneilla niitä ei useinkaan onnista. olisi kuitenkin mukavaa jos pystyisi määräämään ketkä saavat ottaa koneelle yhteyttä, ja sen toki pystyykin tekemään seuraavasti:
avataan mieleisessään tekstieditorissa (rootin oikeuksin toki) tiedosto
/etc/ssh/sshd_config ja muokataan sitä hieman.
ihan näönkin vuoksi muutetaan rivin:
PermitRootLogin yes
arvoksi no.
sitten lisätään vaikka jonnekin tiedoston loppupuolelle rivi joka alkaa avainsanalla
AllowUsers ja listataan sen perään välilyönnillä erotettuna käyttäjät jotka saavat ottaa koneeseen yhteyden, vaikkapa näin:
AllowUsers janne mikk0 ninnnu
tallennetaan tiedosto ja käynnistetään palvelin uudestaan komentamalla:
# /etc/init.d/ssh restart
nyt koneelle pääsevät vain janne, mikk0 ja ninnnu, loistavaa
tuolla varmaan pärjääkin jo jonkin aikaa, mutta mitä jos ihan esimerkin vuoksi tiivistetään seulaa... otetaan käyttöön avaimet.
muokataan em. tiedostoa kohdasta:
#AuthorizedKeysFile %h/.ssh/authorized_keys
poistetaan riviltä kommentti (se risuaita siitä alusta).
ja samoin riviltä:
#PasswordAuthentication yes
ja muutetaan lisäksi sen arvoksi no.
nyt vain tallennetaan tiedosto ja käynnistetään palvelin uudestaan. huomataan, että kukaan ei pääse sisään, itse asiassa kukaan ei pääse edes yrittämään salasanan arvaamista. nyt onkin tosi turvallista, mutta mitenkäs siihen sitten oikein pääsee sisälle...
käyttäjien pitää luoda itselleen avaimet joita tulee kaksi kappaletta, julkinen ja yksityinen. julkinen avain pitää toimittaa koneelle johon ollaan loggautumassa ja se pitää lisätä käyttäjän kotihakemistossa olevaan hakemistoon
.ssh tiedostoon
authorized_keys aivan kuten tuolla konffissa määrittelimme.
windows-käyttäjä voi luoda avaimen putty:n tarjoamalla softalla nimeltä
puttygen. suosittelen generoimaan
DSA-tyyppisen avaimen jonka pituus on vähintään 1024, mutta mielellään 2048 bittiä.
linuxissa (ja mäkissä OsX:ssä) homma hoituu komentoriviltä komennolla
ssh-keygen. koko komento voisi olla vaikka seuraavanlainen:
$ ssh-keygen -b 2048 -t dsa
se luo dsa-tyyppisen avainparin jonka pituus on 2048 bittiä.
kannattanee hyväksyä tiedostojen oletussijainti
~/.ssh/id_dsa ja
~/.ssh/id_dsa.pub. noista jälkimmäinen on se julkinen avain (public) joka pitää toimittaa palvelimelle. tuo ohjelma kysyy myös salasanaa joka liitetään avaimeen ja jota käytetään jatkossa avaimen kanssa loggautuessa (se voi olla eri kuin käyttäjän kohdekoneen salasana).
kun meillä nyt on avain ja sitä vastaava salasana, voidaan avain kopioida paikoilleen. (huom. puttygenin generoiman avaimen alussa ja lopussa on kommenttirivi jotka on hyvä poistaa ennen avaimen lisäämistä käyttäjän tietoihin).
avaimen lisääminen tapahtuu vaikkapa näin:
cat <avain> >> /home/<käyttäjä>/.ssh/authorized_keys
nyt loggamista avaimeen liitetyn salasanan kanssa voi jo yrittää ja sen pitäisi onnistuakin. toisaalta murtautujan jolla ei ole privaattiavainta, pitäisi sisään päästäkseen arvata käyttäjätunnus, käyttäjän 2084 bittinen privaattiavain ja avainta vastaava salasana. heikolta näyttää murtautujan puolesta.
linuxissa tuota privaattiavainta osataan käyttää/tarjota automaattisesti jos se on tallennettu tuonne oletussijaintiin, windowsissa sovellukselle pitää kertoa missä käytettävä avain on (sitä varten sovelluksessa on joku kenttä).
windows-sovelluksia ja
gftp:tä käytetään kuten mitä tahansa ftp-ohjelmaa, mutta
nautilus ja
konqueror toimivat hitusen eri tavalla.
nautiluksessa etäyhteys otetaan vaikkapa
Places -> Connect to Server... valinnan kautta.
Service type on
SSH, porttia ei tarvitse antaa mutta se on 22 ellei serveri ole konffattu muuhun porttiin, ja loput kohdat ovatkin selviä.
toinen vaihtoehto on painaa nautiluksen avoimen ikkunan päällä
<ctrl> + l ja kirjoittamalla riville
sftp://<käyttäjätunnus>@<palvelin> ja enteriä. tuota käyttäjätunnusta ja sen jälkeen olevaa @:iä ei tarvita jos käyttäjätunnus on sama molemmilla koneilla.
Breezyssä avattuihin yhteyksiin voikin tehdä bookmarkkeja jolloin niihin pääsen helposti käsiksi myöhemmin.
konquerorilla homma onnistuu ainakin kirjoittamalla osoiteriville
fish://<käyttäjätunnus>@<palvelin> ja tässäkään ei tarvita välttämättä tuota käyttäjätunnusta ja @:iä.