Linux-jakeluiden mukana tulee lähes poikkeuksetta sekä OpenSSH-palvelin -että asiakasohjelma. Ohjelmistopaketti on erinomainen, sillä se taipuu paljon muuhunkin kuin muiden palvelinten turvalliseen etäkäyttöön. Eräs esimerkki tästä on etäpalvelimen hakemistojen - tai koko hakemistorakenteen - liittäminen näkymättömästi osaksi oman tietokoneen hakemistorakennetta. Vaikkapa NFS:ään verrattuna ratkaisu on toki varsin rajoittava, mutta toisaalta esim. heikolla WEP-salauksella suojattuun langattomaan kotiverkkoon ratkaisu tuo huomattavasti lisäturvaa: kaikki tieto verkossa kulkee salattuna SSH:n lävitse.
OpenSSH:n ja sshfs:n käyttö ei sovellu sellaisten lähiverkkojen rakentamiseen, joissa kaikkien tietokoneiden halutaan pääsevän käsiksi kaikkien tietokoneiden tiedostoihin. Sshfs on kuitenkin omiaan sellaisiin tilanteisiin, joissa kaikki jaettavat tiedostot ovat yhdellä palvelimella, eikä niitä tarvitse jakaa kovin monelle asiakaskoneella ja/tai käyttäjälle.
Fuse on ohjelmistopaketti, jonka avulla käyttäjät voivat liittää (engl. mount) haluamiaan tiedostojärjestelmiään omiin hakemistoihinsa ilman pääkäyttäjän oikeuksia. Sshfs käyttää fusea, joten toimiakseen se vaatii Linuxin ytimeltä fuse-tuen. Asian voi tarkistaa komennolla
lsmod|grep fuse
Jos fuse-moduulia ei löydy, koeta ladata se käsipelillä pääkäyttäjän oikeuksin:
modprobe fuse
Mikäli jälkimmäinen komento antaa virheilmoituksen, on joko
Ainakaan Debianin tai Ubuntun kernel-source -paketeissa ei ole fuse-tukea suoraan mukana, joten niissä pitää asentaa fuse-source -paketti sekäkääntää ja asentaa se. Mikäli käytät Ubuntun tai Debianin omia (ei lähdekoodista käännettyjä) ytimiä, on fuse-tuki luultavasti jo päällä. Lisätietoja moduulien kääntämisestä saa Debianin sivuilta. Mikäli on tarpeen kääntää järjestelmän ydin itse, löytyy yleisiä ohjeita ainakin osoitteesta http://www.tldp.org. Ytimen fuse-tuen käyttöönottoon liittyviä ohjeita löytyy osoitteesta http://fuse.sourceforge.net.
Kun ytimen fuse-tuki on kunnossa, pitää asentaa myös fuse- ja sshfs -ohjelmistot. Debianissa (etch) asennus on erittäin yksinkertaista:
aptitude update aptitude install sshfs libfuse2 fuse-utils
Periaatteessa tämän jälkeen voi sshfs:ä jo kokeilla komennolla
sshfs käyttäjä@palvelin liitoskohta
Liitoskohdaksi pitää valita sellainen hakemisto, johon käyttäjällä on kirjoitusoikeudet. Tästä syystä on helpointa luoda uusi hakemisto käyttäjän kotihakemistoon ja käyttää sitä liitospisteenä.
Etäpalvelimen osalta asetusten tekeminen on helppoa: tarvitaan vain toimintakuntoinen OpenSSH-palvelin. Mikäli ssh-yhteys muilta tietokoneilta palvelimeen on kunnossa, ei myöskään sshfs:n käytössä pitäisi olla ongelmia.
Vaikka sshfs toimiikin ilman erityistä virittelyä, on pidemmän päälle helpompaa, jos tiedostojärjestelmiä liitettäessä ei aina tarvitse kirjoittaa salasanaa. Kirjautuminen palvelimelle ilman salasanaa onnistuu, jos käytetään julkiseen ja yksityiseen avaimeen perustuvaa todennusta (engl. public key authentication). Avain luodaan jokaisella asiakaskoneella ja jokaiselle käyttäjälle erikseen. Avaimen luomisen jälkeen avainparin julkinen osa (engl. public key) lisätään palvelimelle halutun käyttäjän tiedostoon ~/.ssh/authorized_keys. Yksityinen avain jää ainoastaan asiakaskoneelle: sitä ei kopioida palvelimelle.
Asia lienee helpointa hahmottaa esimerkin avulla. Alla luodaan asiakaskoneella julkinen avain, joka kopioidaan palvelimelle 192.168.50.1. Salasanaa ei ole syytä antaa, mikäli haluaa päästä palvelimen resursseihin käsiksi ilman salasanaa.
samuli@localhost:~$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/samuli/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/samuli/.ssh/id_dsa. Your public key has been saved in /home/samuli/.ssh/id_dsa.pub. The key fingerprint is: dd:ae:ad:6c:af:41:49:2d:78:57:4b:60:54:bb:62:6b samuli@localhost samuli@localhost:~$
Avaimen luonnin jälkeen sen julkinen osa kopioidaan palvelimelle, käyttäjän samuli kotihakemistoon:
samuli@localhost:~$ cat ~/.ssh/id_dsa.pub|ssh samuli@192.168.50.1 "cat >> ~/.ssh/authorized_keys"Edellisessä komennossa putkitetaan cat-ohjelman avulla julkinen avain ssh:n läpi palvelimen cat-ohjelmalle, joka lisää sen luotettujen avainten listaan. Mikäli palvelimen käyttäjän kotihakemistossa ei ole hakemistoa .ssh, antaa komento virheilmoituksen. Asian voi korjata esim. käynnistämällä ssh-ohjelma palvelimella ko. käyttäjänä, jolloin tarvittava hakemisto luodaan automaattisesti.
Kun avain on luotu, kokeillaan, toimiiko avaimeen perustuva todennus:
samuli@localhost:~$ ssh samuli@192.168.50.1 Linux localhost 2.6.13 #1 Sat Jan 14 11:24:06 EET 2006 i686 GNU/Linux The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. You have new mail. Last login: Tue Apr 25 18:48:29 2006 from 192.168.50.50 samuli@localhost:~$
Koska salasanaa ei kysytty, julkiseen avaimeen perustuva todennus näytti toimivan. Mikäli salasanakysely tulee edelleen vastaan, varmista ainakin seuraavat asiat:
Kun asiakaskoneelta pääsee ilman salasanaa palvelimelle, on aika kokeilla sshfs:n käyttöä. Allaolevassa esimerkissä luodaan asiakaskoneelle hakemisto, johon palvelimen päähakemisto eli "/" liitetään.
samuli@localhost:~$ mkdir ~/palvelin samuli@localhost:~$ sshfs samuli@192.168.50.1:/ ~/palvelin
Mikäli verkkoyhteys asiakkaan ja palvelimen välillä on kunnossa, pitäisi näiden komentojen jälkeen asiakkaan hakemistosta ~/palvelin päästä käsiksi palvelimen tiedostoihin palvelimen käyttäjän oikeuksin. Tiedostojärjestelmän irroittaminen (engl. unmount) ei kuitenkaan tapahdu sshfs-komennolla, vaan komennolla fusermount:
samuli@localhost:~$ fusermount -u ~/palvelin samuli@localhost:~$ ls -l ~/palvelin yhteensä 0 samuli@localhost:~$
Kun sshfs toimii, voidaan tiedostojärjestelmän liittäminen ja irroittaminen tehdä yksinkertaisemmaksi esim. allaolevalla bash-skriptillä. Skripti toimii Debian Etchissä, mutta esimerkiksi Ubuntu 5.1:ssä siihen täytyy tehdä pieniä muutoksia johtuen sshfs:n muuttuneesta syntaksista ja $USERNAME -muuttujan puuttumisesta (Ubuntussa $USER).
#!/bin/bash
# Tämä skripti liittää tai irroittaa sshfs-tiedostojärjestelmän
# riippuen siitä, onko tiedostojärjestelmä liitettynä vai ei.
# Skriptiä pitää muokata mikäli yksittäinen käyttäjä haluaa liittää
# useampia kuin yhden tiedostojärjestelmän
SERVER="192.168.50.1"
LOGIN_ID=$USERNAME
LOCAL_MOUNTPOINT="$HOME/palvelin"
REMOTE_ROOT="/"
PORT="22"
if test -z "$(cat /etc/mtab|grep sshfs|grep $USERNAME)"; then
echo "Liitetään palvelimen hakemisto "$REMOTE_ROOT" liitoskohtaan "$LOCA
L_MOUNTPOINT" käyttäjän "$LOGIN_ID" oikeuksin"
sshfs $LOGIN_ID@$SERVER:$REMOTE_ROOT $LOCAL_MOUNTPOINT -o -p $PORT
else
echo "Irroitetaan sshfs tiedostojärjestelmä palvelimelta "$SERVER
fusermount -u $LOCAL_MOUNTPOINT
fi