BebboSSH AROS 1.0.8: stop ai client bloccati

Indice della guida

BebboSSH AROS 1.0.8, pubblicato il 29 ottobre 2026 per i386, x86_64 e aarch64, affronta un problema poco spettacolare ma decisivo per usare AROS da remoto: un client che smette di ricevere dati non deve tenere bloccato il server senza fine. Nel mio port AROS di BebboSSH ho concentrato questa release sulla robustezza del demone, senza presentarla come una nuova shell completa o un cambio di algoritmi crittografici.

Il progetto deriva da BebboSSH di Stefan “Bebbo” Franke. Il porting AROS è il mio lavoro derivato, distribuito con licenza GPLv3 o successiva e con i crediti upstream conservati. Rispetto alla 1.0.7, dedicata anche alla compatibilità PuTTY e WinSCP, qui il punto è come il servizio reagisce quando una connessione si comporta male.

Il client non legge: perché si fermava tutto

Nel percorso di invio, una socket temporaneamente non scrivibile produce EAGAIN: non è necessariamente una connessione persa, può semplicemente mancare spazio nel buffer. La routine riprovava, ma senza un limite al mancato avanzamento. Se il destinatario non leggeva più, il demone poteva restare dentro quel ciclo, impedendo nuovi login e il servizio delle altre sessioni.

Nella 1.0.8 l’invio viene abbandonato dopo 30 secondi senza progressi; se arrivano nuovi byte inviati, il conteggio dell’attesa si azzera. Durante lo stallo viene controllato anche Ctrl-C. Il fallimento marca la sessione come morta, che viene poi chiusa fuori dal callback del canale. È una protezione contro un’attesa infinita, non una promessa di trasferimenti sempre completati entro 30 secondi.

Questa correzione non rende magicamente asincrono ogni percorso del server: durante l’attesa possono ancora esserci ritardi. La differenza concreta è che una connessione che non consuma l’output non può più monopolizzare indefinitamente quel ciclo.

Keep-alive e attesa di rete: due altri casi limite

Con SendNoop some o many, il codice assumeva che il canale 0 fosse ancora presente. Se quel canale era chiuso ma ne restava aperto un altro, il keep-alive finiva sul riferimento sbagliato: nelle note x86_64 è documentato un crash, su i386 la disconnessione del client. Ora viene scelto il primo canale effettivamente aperto. L’opzione resta disattivata per impostazione predefinita.

Un errore di WaitSelect() poteva inoltre essere interpretato come disponibilità di lettura di tutte le socket e come pressione di Ctrl-C. Il demone ora registra l’errore, scarta i descrittori non validati e riprende il ciclo; una lettura temporaneamente indisponibile non viene scambiata automaticamente per chiusura della sessione. Sono dettagli del ciclo eventi, ma fanno la differenza fra un errore recuperabile e un servizio che sparisce.

Le differenze fra le tre architetture

  • i386 alt-abiv0 e aarch64: corretto il padding temporale dello scambio chiavi, che attendeva 2,5 volte meno del previsto. L’intervallo misurato gestisce anche l’orologio che torna indietro e limita a cinque secondi una singola durata considerata nel calcolo.
  • i386: il client libera la richiesta keyboard.device usata per leggere i qualificatori della tastiera. Prima una piccola allocazione restava persa nelle esecuzioni che usavano quel percorso, per esempio dopo il primo tasto cursore.
  • Script di verifica: è disponibile BEBBOSSH_AROS_AUTH_HELPER=askpass per passare la password a OpenSSH tramite SSH_ASKPASS. È un’alternativa nei test, non una nuova modalità del protocollo SSH; il valore predefinito resta sshpass.

Cosa è stato verificato, e cosa no

Le note della release documentano prove con gli archivi pubblici su AROS One i386 e x86_64 sotto QEMU e su un Raspberry Pi 400 con AROS raspi-aarch64 del 12 settembre 2026. Riportano 100 login su 100, 80 trasferimenti di stress su 80 senza pausa tra connessioni, upload SFTP da 1 a 16 MiB e verifiche di autenticazione, richieste malformate e forwarding direct-tcpip.

Per il difetto principale è descritto un client che smette di leggere durante un output di 16 MiB: il nuovo login torna possibile dopo il limite di attesa e Ctrl-C durante lo stallo ferma il demone entro due secondi nelle prove riportate. Nel controllo preparatorio di questo articolo ho analizzato il codice e scaricato i sei archivi ZIP/TAR.GZ, verificando integrità e SHA-256 pubblicati. Non ho rieseguito qui i test AROS: i risultati di esecuzione sono quelli documentati per la release, non una nuova sessione di collaudo.

I limiti che restano importanti

Non c’è ancora una shell interattiva PTY completa, né il supporto a pipe e redirezioni nei comandi remoti. Su i386 e aarch64 un comando lanciato dentro la sessione interattiva può bloccare le altre connessioni finché termina; per operazioni lunghe è preferibile la forma ssh host comando, eseguita in un task separato. Anche lì, il timeout di 30 secondi con stato 124 non uccide il comando, che continua fino alla conclusione. Non va confuso con il nuovo limite dell’invio bloccato.

Su x86_64/mincrt l’esecuzione remota resta sincrona: usare comandi brevi. Un volume non montato richiesto via SFTP può aprire sullo schermo AROS un requester che blocca il demone. Con carichi pesanti, il problema del driver e1000 segnalato nelle note è distinto da BebboSSH: usare rtl8139 o pcnet finché la distribuzione non integra la correzione upstream. Su Pi 400 evitare log di debug -v5 su console durante trasferimenti intensi, scenario che nelle prove ha congelato il sistema.

Restano inoltre la mancata conservazione dell’orario con OpenSSH put -p e il limite sul messaggio di chiusura canale inviato per primo dal client. Su i386 il demone offre solo aes128-gcm@openssh.com se non si configura una riga Ciphers; su x86_64 HomeDir e alcune funzioni SFTP richiedono ancora gli opt-in descritti nelle note.

Download di BebboSSH AROS 1.0.8

I tre tag puntano allo stesso commit di release e0df1b9, ma contengono binari per architetture diverse. I commit successivi sul ramo principale aggiornano i valori predefiniti degli script e i collegamenti di sostegno: non sono nuove funzioni dei pacchetti 1.0.8. Anche le tre schede Aminet risultano alla versione 1.0.8 al controllo del 1 novembre.

Piattaforma Archivi GitHub Aminet
i386 ABI v0 ZIP / TAR.GZ Scheda
x86_64 mincrt ZIP / TAR.GZ Scheda
Raspberry Pi aarch64 ZIP / TAR.GZ Scheda

Prima di avviare il servizio

Il kit contiene server, client SSH/SCP, generatore Ed25519, esempi di configurazione e istruzioni. Sostituire le credenziali di prova del file passwd prima di esporre il demone e seguire README.AROS.txt per creare il seed iniziale e poi la chiave host. I binari AROS sono collegati staticamente a libcryptossh.a: non richiedono l’installazione separata della libreria Amiga omonima.

Il senso pratico della 1.0.8 è questo: rendere più prevedibile un servizio che uso come infrastruttura di laboratorio. Un login riuscito è solo l’inizio; conta anche recuperare quando il client si ferma, la rete restituisce un errore o un canale è già stato chiuso.

Fonti e note della release

AUTORE

Informatico, sviluppatore e sistemista con una lunga storia tra codice, server Linux, retrocomputer e piattaforme e-learning. Su AndroidLab porta uno sguardo tecnico e pragmatico: meno fumo da brochure, più attenzione a infrastruttura, usabilità, privacy, aggiornamenti e conseguenze concrete delle scelte dei produttori.

Lascia un commento