Cosa Sostituire a OpenSSH sui Dispositivi a Basso Consumo e sui Router
Quando crei un'immagine minimalista per un microcontrollore, router o container Docker, ogni megabyte di memoria diventa un lusso. OpenSSH completo funziona benissimo sui server, ma per i sistemi embedded sembra un camion che si ferma davanti a un negozio di quartiere. Trascina con sé una scia di dipendenze e la RAM letteralmente si scioglie davanti ai tuoi occhi.
In situazioni come queste, le persone si rivolgono a Dropbear. È un server e client SSH compatto scritto da Matt Johnston. Il progetto è apparso oltre vent'anni fa, ma è ancora attivamente mantenuto e rappresenta lo standard predefinito in OpenWrt e nel firmware dei dispositivi di rete.
Cosa c'è dentro e come si ottiene il risparmio
Dropbear risolve un compito specifico: risparmiare spazio su disco e RAM mantenendo la sicurezza di base del protocollo SSH-2. Se compili il progetto con i flag giusti, il binario risultante occupa solo un paio di centinaia di kilobyte.
Lo sviluppatore ha applicato il concetto di un singolo binario multiuso, in modo simile a come funziona l'utility BusyBox. In questa modalità, un singolo file gestisce le funzioni di server, client dbclient, generatore di chiavi dropbearkey e convertitore dropbearconvert. Crei link simbolici con i nomi richiesti che puntano a un unico binario, e il programma determina la sua modalità operativa in base al nome del file chiamato.
Ecco altri trucchi per ridurre le dimensioni:
- Il client integrato
scpviene compilato senza barra di avanzamento del trasferimento file per impostazione predefinita. Se hai bisogno di un indicatore, devi passare esplicitamente il parametroSCPPROGRESS=1durante la compilazione. - Nel file
options.h, puoi disabilitare manualmente algoritmi di crittografia inutilizzati, inoltro di porte o supporto per l'autenticazione con password, riducendo ulteriormente la dimensione finale del file.
Sfumature nella gestione delle chiavi
Se sei abituato agli strumenti standard di OpenSSH, il progetto ti riserverà qualche sorpresa. Dal lato server, tutto è familiare: il file ~/.ssh/authorized_keys funziona nel modo standard. Aggiungi lì le chiavi pubbliche in formato ssh-rsa o ssh-ed25519. L'importante è assicurarti che il tuo editor non suddivida la stringa della chiave su più righe e che i permessi sulla directory .ssh consentano la scrittura solo al proprietario.
Dal lato client e durante la generazione delle chiavi host, iniziano le particolarità. L'utility utilizza un proprio formato per le chiavi private. Per usare la tua chiave ~/.ssh/id_rsa familiare nel client dbclient, devi prima convertirla:
dropbearconvert openssh dropbear ~/.ssh/id_rsa ~/.ssh/id_rsa.db
dbclient -i ~/.ssh/id_rsa.db user@remotehost
Se crei una nuova chiave attraverso l'utility nativa dropbearkey, le parti privata e pubblica vengono output direttamente sulla console. Puoi estrarre la chiave pubblica per aggiungerla a un altro server con un semplice filtraggio:
./dropbearkey -y -f ~/.ssh/id_ed25519 | grep "^ssh-" > ~/.ssh/id_ed25519.pub
Avvio del server e insidie
Di solito, prima di avviare il server SSH, devi generare manualmente le chiavi host:
./dropbearkey -t rsa -f dropbear_rsa_host_key
./dropbearkey -t ed25519 -f dropbear_ed25519_host_key
Dropbear ha un comodo trucco per l'avvio rapido del sistema. Invece di generare le chiavi all'avvio (il che rallenta il boot su processori deboli), passi il flag -R al server. In questo caso, le chiavi verranno create automaticamente nella directory /etc/dropbear/ solo alla prima connessione in entrata.
Durante il funzionamento, tieni presenti le particolarità del progetto:
- Eseguire il server come utente normale è fortemente limitato. Non potrai allocare un pseudo-terminale (pty), passare a un altro account o utilizzare password shadow.
- Le chiavi host crittografate con password non sono supportate direttamente, sebbene il client possa connettersi a un
ssh-agentin esecuzione. - Il progetto manca di documentazione dettagliata. Le istruzioni principali sono sparse nei file di testo
INSTALL.md,MULTI.mdeSMALL.mdnella root del repository.
A chi sarà utile questo strumento
Dropbear tornerà utile se stai creando firmware personalizzato per router, sviluppando un dispositivo basato su Linux con memoria flash limitata o costruendo un'immagine initramfs compatta. Su un server completo con decine di gigabyte di memoria, difficilmente noterai alcuna differenza rispetto a OpenSSH. Ma dove ogni kilobyte conta, questo strumento conserva le risorse meglio della maggior parte delle alternative.
Progetti correlati