OpenSSH

AutoSSH

Vikatilanteissa tulee usein tarve päästä paikallisesti käsiksi laitteeseen tai ainakin varmistaa, että etähallinta on varmistettu jollakin tavalla. Hallittava laite voi olla vaikeasti saavutettavissa etäisyyden takia tai laite sijaitsee tilassa johon ei ole pääsyä 24/7. Myös aktiivilaitteen toiminta voi haitata yhteyden ylläpitoa. Laitteen verkkoasetukset voivat vaihtua tai laite voi uudelleenkäynnistyä itsestään menettäen yhteyden. SSH-tunnelin aktiivisena pitämiseksi on kaksi vaihtoehtoa. SSH-tunneli voidaan luoda suoraan SSH-ohjelmalla ja SSH-prosessia voidaan tarkkailla komentosarjalla. Tarvittaessa komentosarja käynnistää SSH-ohjelman uudelleen. Useat Linux-jakelut sisältävät AutoSSH-ohjelman, johon on sisäänrakennettu yhteyden tilan tarkkailu. AutoSSH voidaan asettaa tarkkailemaan SSH-yhteyttä erilaisin määritelmin ja vikatilanteessa käynnistämään SSH-yhteys uudelleen. AutoSSH:n ja tunneloinnin automatisointi vaatii public key -tunnistautumisen.

Asennetaan AutoSSH-ohjelma, muokataan rc.local-tiedostoa ja asetetaan AutoSSH käynnistymään käynnistyksen yhteydessä. HUOM. autossh-komennon ja optioiden tulee olla samalla rivillä rc.local-tiedostossa. Esimerkissä optiot on jaettu usealle riville selkeyden vuoksi.

root@IoT # apt-get install autossh

root@IoT # vi /etc/rc.local
runuser -l antti
-c '/usr/bin/autossh -M 0 -f -R 2000:localhost:22
-o "ExitOnForwardFailure yes"  
-o "ServerAliveInterval 60"
-o "ServerAliveCountMax 3" -N antti@192.168.0.100'

exit 0


runuser -l määrittelee käyttäjätunnuksen jolla komento ajetaan ja -c määrittelee komennon.
-f optio asettaa AutoSSH:n tausta-ajoon ennen kuin käynnistää SSH:n. -R määrittelee remote forwardin.
-M optiolla asetetaan yhteyden tilan tarkkailuun tarkoitettu portti. -M varaa käyttöönsä kaksi porttia ja tämän lisäksi varataan vielä yksi portti SSH-liikenteelle. -M 2000 asettaa portin 2000 echon lähetysportiksi ja tästä seuraava portti eli 2001 toimii paluukanavana. -M 0 asettaa yhteyden tilan tarkkailu pois käytöstä. ServerAliveInterval-optiolla palvelinta pingataan yhteyden tilan testaamiseksi. Se kuinka kauan ping-kyselyyn saa kulua aikaa asetetaan sekunteina. Esimerkissä 60 sekuntia. ServerAliveCountMax määrittelee kuinka monta kertaa palvelinta yritetään pingata ennen kuin yhteys katkaistaan ja yritetään yhteyttä uudelleen.

ExitOnForwardFailure asetuksella määritellään yhteyden sulkeminen, jos port forward ei onnistu. Tämä on oleellinen asetus tehtäessä IoT esimerkin mukainen konfiguraatio. AutoSSH ei ota kantaa palvelimen päässä olevien yhteyksien tilaan. Ilman aikakatkaisua edellinen yhteys on voinut jäädä established-tilaan. Tällaisessa tapauksessa palvelimen forward port on varattu. AutoSSH muodostaa SSH-yhteyden, mutta ei kykene tekemään port forwardia eikä ilmoita port forwardin epäonnistumisesta. -N optio määrittelee käytettävän käyttäjätunnuksen ja osoitteen johon SSH-yhteys avataan.

antti@palvelin $ ssh localhost -p 2000
antti@localhost's password:

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.
Last login: Tue Apr 25 12:37:58 2016 from localhost
antti@IoT $


Palvelimen konfiguraatio

Palvelimen sshd_config-tiedostoon tulee määritellä ssh-yhteyden aikakatkaisuun liittyviä määritteitä. Ilman näitä yhteydet jäävät kummittelemaan palvelimelle, eikä yhteyden uudelleenmuodostus onnistu. Katkaistaan SSH-yhteys jos client ei vastaa kutsuihin 20 sekunnin sisällä ja kolmen yrittämän jälkeen.

root@palvelin # vi /etc/ssh/sshd_config
ClientAliveInterval 20
ClientAliveCountMax 3