Suurin osa SSH-yhteyden elossapidon ohjeista pysähtyy kohtaan «lisää ServerAliveInterval 30» ja jättää hyödylliset osat pois. Avainsana on asiakaspään ajastin, joka laukeaa vain kun kanava on ollut hiljainen, se laskee vastaamattomia koekyselyitä sekuntien sijaan, ja se asuu tiedostossa, jossa ensimmäinen täsmäävä arvo voittaa. Erehdy noissa kolmessa ominaisuudessa, niin terve VPN-istunto katkeaa silti, kun taas kuollut jää roikkumaan.

Kaksi suuntaa kuuluvat eri daemoneille

ServerAliveIntervalin lukee ssh-asiakkaasi. ClientAliveIntervalin lukee sshd toisessa päässä ja se testaa vastakkaiseen suuntaan, palvelimelta asiakkaalle. Ne eivät ole aliaksia eivätkä tee yhteistyötä, joten toisen asettaminen ei vaikuta toisen pään toimintaan. Niiden sekoittaminen on tavallinen syy siihen, miksi korjaus näyttää toimivan yhdellä koneella eikä seuraavalla.

Molemmat hyväksyvät nollan. Nollassa asiakas ei lähetä yhtään mitään, ja palvelinpäässä nollan ClientAliveCountMax kytkee pois katkaisun, joka muuten seuraisi vastaamattomista tarkistuksista.

Mitä koekysely todistaa ja mitä ei

Kun asetettu aikaväli on kulunut ilman, että palvelimelta saapuu dataa, asiakas lähettää pienen pyynnön olemassa olevan salatun kanavan kautta ja odottaa vastausta. ServerAliveCountMax määrää, kuinka moni niistä saa jäädä vastaamatta ennen kuin istunto puretaan. Kun aikaväli on 60 ja lukumäärä 3, asiakas luovuttaa noin kolmen minuutin hiljaisuuden jälkeen, ja tuo luku on asetuksesi ominaisuus eikä verkkostandardi. Jätä aikaväli oletusarvoonsa 0, niin yhtään koekyselyä ei koskaan lähetetä, minkä vuoksi tavallinen asiakas voi istua kuolleella yhteydellä loputtomiin.

Koska vaihto tapahtuu SSH-siirron sisällä, vastaus todistaa, että vastapuolen SSH-prosessi yhä lukee ja kirjoittaa. Se ei kerro mitään siitä ohjelmasta, jonka käynnistit istunnon sisällä: tietokanta-asiakas, edelleenohjattu portti tai pitkään käyvä skripti voi olla jumissa, kun siirto iloisesti vastaa koekyselyihin.

TCPKeepAlive on erillinen mekanismi yhden kerroksen alempana. Ydin hoitaa sen, se ei ole salattu, ja vastapuoli, jonka SSH-daemon on jumissa, voi yhä täyttää sen. Siksi SSH-tason koekysely on merkityksellisempi signaali, kun sinulle on tärkeä istunto eikä pistoke.

Järjestys ratkaisee, mikä arvo jää voimaan

OpenSSH soveltaa ensimmäistä arvoa, jonka se saa kullekin parametrille, joten tietyn Host-lohkon on oltava ennen mitä tahansa laajempaa lohkoa, joka myös täsmäisi. Laita jokerimerkkien oletusarvot tiedoston loppuun, älä alkuun, ja muista, että alempana oleva Match-lohko ei voi ohittaa jo asetettua arvoa. OpenSSH:n asiakasasetusten viite ilmaisee ensimmäisen arvon säännön suoraan, ja se kannattaa lukea kerran ennen jaetun asetuksen uudelleenjärjestämistä.

Komentorivivaihtoehdot voittavat tiedoston, mikä tekee tilapäisestä kokeesta halpaa:

ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shell

Nähdäksesi, mitä asiakas todella ratkaisi sen sijaan, mitä luulet kirjoittaneesi, pyydä sitä tulostamaan voimassa oleva asetus. Tuloste sisältää kyseisen konenimen yhdistetyt arvot ja on nopein tapa napata harhautunut aiempi lohko:

ssh -G office-shell | grep -i alive

Mitä keepalivet tekevät tunnelin yli

Säännöllinen liikenne estää tilallisen NAT- tai palomuurimäärityksen vanhenemisen, mikä on todellinen hyöty VPN:llä, jonka yhdyskäytävä pudottaa joutilaat virtaukset muutaman minuutin kuluttua. 60 sekunnin välein saapuvat koekyselyt virkistävät tuota määritystä kantamatta lainkaan sovellusdataa.

Ne eivät voi rakentaa uudelleen polkua, joka on kadonnut. Kun tunnelirajapinta katoaa, koekyselyt epäonnistuvat kuten kaikki muukin, ja istunto päättyy, kun lukumäärä on käytetty. Elossaolon tunnistus ja polun palautus ovat eri ongelmia, ja vain ensimmäinen on asetettavissa ssh_configissa. Mitä aikaväli ja lukumäärä todella ostavat, on se, kuinka nopeasti asiakas huomaa, ja juuri sen käyttäjä kokee jumittumisena.

Multipleksoidut yhteydet lisäävät mutkan. Kun ControlMaster on pelissä, koekyselyt kuuluvat pääyhteydelle, ja uusi istunto olemassa olevan pään yli perii sen, mistä se pää neuvotteli. Jos mux-pää on jumissa, toisen ikkunan avaaminen ei testaa polkua uudelleen.

Asetuksen varmistaminen päästä päähän

Tulosta palvelimella daemonin voimassa oleva asetus sen sijaan, että lukisit tiedoston ja arvailisit, mikä include voitti:

sshd -T | grep -i clientalive

Seuraa sitten oikeaa istuntoa virheenkorjaustuloste päällä. Asiakas tulostaa aikakatkaisurivin, kun lukumäärä loppuu, ja sen ympärillä olevat aikaleimat näyttävät, oliko hiljaisuus yhtäjaksoista vai eikö koekyselyitä lähetetty lainkaan. Istunnossa, joka kuolee ilman koeliikennettä, avainsana on yleensä lohkossa, joka ei koskaan täsmännyt.

Kaksi tarkistusta kannattaa lisätä jokaiselle koneelle, johon pääset vain tunnelin kautta: varmista, että ratkaistu aikaväli on se, jonka tarkoitit, ja varmista, että tuo aikaväli kerrottuna lukumäärällä on lyhyempi kuin VPN-yhdyskäytävän joutilaanaolon aikakatkaisu. Kun toinen luku on suurempi, yhdyskäytävä pudottaa virtauksen ensin hiljaa, eikä SSH-koekysely saa koskaan tilaisuutta raportoida mitään.

Aiheeseen liittyvät artikkelit