Sessions com aquesta es mantenen connectades mentre l'editor s'inicia, i després la pantalla deixa d'actualitzar-se tot i que el procés SSH és clarament viu. Escriure no produeix res, Ctrl-C sembla no fer res, i la conclusió òbvia és que la VPN ha deixat caure alguna cosa. La majoria de les vegades el túnel està bé i el pseudo-terminal remot és en un estat que ningú no volia, perquè l'eco, l'entrada canònica i el control de flux viuen al terminal, no a la xarxa. Esbrinar quin dels tres s'ha mogut és una feina de dues ordres.

La congelació viu al terminal, no al túnel

Un pseudo-terminal porta més que bytes. Té indicadors de disciplina de línia que decideixen si l'entrada es mostra, si les lectures esperen un salt de línia, si certs caràcters generen senyals i si la sortida es pot aturar amb un caràcter de control. Un editor interactiu posa aquell terminal en mode cru durant tota l'estona i hauria de restaurar la configuració anterior en sortir. Quan la restauració no passa, l'intèrpret que recupereu no és el que vau deixar, encara que la connexió no s'hagi tallat mai.

Compareu terminals abans de concloure res. Una segona sessió amb el mateix editor demostra que el client i el camí poden fer la feina; no diu res del terminal els indicadors del qual estan trencats.

Llegiu la configuració al terminal que s'ha congelat

Identifiqueu primer el dispositiu i després llegiu les dues formes del seu estat. La forma llegible mostra què està definit, i la forma de màquina és la que podeu tornar a aplicar més tard.

tty
stty -a
stty -g

Tres grups d'indicadors expliquen la majoria d'aquests informes. La configuració d'eco decideix si les pulsacions apareixen, així que un terminal amb l'eco desactivat sembla mort mentre l'intèrpret rep cada caràcter. El mode canònic decideix si un programa veu l'entrada línia a línia, així que un terminal deixat en mode canònic fa que una aplicació en mode cru sembli ignorar les tecles fins a Enter. La configuració de control de flux decideix si el terminal obeeix els caràcters XON i XOFF, i aquest grup produeix la congelació falsa més convincent de les tres.

Registreu la sortida abans de canviar res, sobretot quan la sessió porta combinacions de tecles personalitzades de les quals algú depèn. La forma de màquina és el registre més segur, amb l'advertiment que depèn de la implementació i que l'ha de restaurar el mateix tipus de sistema que l'ha produït.

Repareu aquell terminal, no la sessió on escriviu

La reparació estàndard restaura el perfil sa que llista la pàgina de manual, i afecta només un terminal. Si l'editor encara té feina no desada en aquell terminal, deixeu-lo estar fins que la feina es desi.

Des d'una altra shell, adreceu-vos explícitament al dispositiu congelat perquè el terminal on treballeu quedi intacte.

stty -F /dev/pts/7 -a
stty -F /dev/pts/7 sane

Una pantalla en blanc amb una visualització corrupta és un problema diferent de la disciplina de línia trencada, i el programa reset l'aborda emetent seqüències d'inicialització del terminal. Proveu primer la reparació de l'estat, perquè canvia paràmetres que podeu inspeccionar, mentre que la seqüència reset reescriu la pantalla i no explica res de com s'ha trencat.

El parany de Ctrl-S darrere una congelació convincent

Quan el control de flux per programari està activat i els caràcters habituals estan assignats, Ctrl-S diu al terminal que deixi d'enviar sortida i Ctrl-Q li diu que continuï. La sessió es manté viva tot el temps, un sol Ctrl-Q sovint és tota la reparació, i no apareix res a cap registre, i així és com aquesta congelació sobreviu a tantes escalades.

Inspeccioneu la configuració real en lloc de suposar-la. Els caràcters d'inici i aturada es poden reassignar o desactivar, i un terminal amb el control de flux desactivat no reaccionarà a cap dels dos.

Si l'estat torna, o l'SSH mateix s'encalla

Un estat dolent recurrent apunta a alguna cosa que canvia els indicadors sense restaurar-los: un fitxer d'inici, un script embolcall, un multiplexor que reinicia la finestra equivocada o una aplicació que mor mentre té el mode cru. Afegiu una comprovació condicional que informi de l'estat en lloc d'un reinici incondicional, perquè un reinici general amaga la causa i pot passar per sobre de configuracions deliberades.

Quan el trànsit SSH ordinari també s'encalla, o la reparació no canvia res, el terminal deixa de ser el sospitós.

ssh -vvv [email protected]
ping -M do -s 1400 -c 3 host.example.com

Una aturada que només apareix durant transferències grans suggereix un problema d'MTU al camí, mentre que una que també engoleix pulsacions individuals apunta al camí o al servidor, no a la mida del paquet. Mantingueu les proves del terminal separades de les proves de la xarxa, perquè un editor que funciona en una segona sessió no és prova que el primer terminal mai fos sa.

Articles relacionats