Sensori e controllo di Apple Mac e Linux con Home Assistant

Sensori e controllo di Apple Mac e Linux con Home Assistant

SSH
Argomento: Configurazioni
Livello: Esperto (Novizio,Esperto, Pro)
Difficoltà: Bassa (Bassa, Media, Alta)

Introduzione

In questo articolo vedremo come recuperare alcune informazioni da computer Apple Mac che risulta anche applicabile a sistemi Linux e sue varianti che girano su Rasberry; sarà anche possibile effettuare lo spegnimento o il riavvio dell’host il tutto attraverso comandi inviati tramite SSH (Secure Socket Shell), un protocollo che fornisce agli utenti un accesso sicuro alle macchine remote con una connessione crittografata. Per automatizzare il procedimento di accesso e renderlo “non interattivo”, cioè senza dover inserire user e password da parte dell’utente, occorre effettuare alcune operazioni preliminari che sono descritte nell’articolo insieme alle configurazioni per Home Assistant.

Come prerequisito per seguire l’articolo occorre avere una conoscenza di base dei comandi Linux come ls, cd, pwd etc.

Crittografia a chiave pubblica

Come detto per avere un accesso non interattivo al Mac (che in questo situazione, si comporta da server) occorre usare SSH con un sistema di crittografia a chiave pubblica e generare una coppia di chiavi una pubblica e una privata:

  • la chiave pubblica è la chiave copiata sui server SSH, nel nostro caso l’iMac. Chiunque abbia una copia della chiave pubblica può crittografare i dati che possono essere letti solo dalla persona/server che detiene la chiave privata corrispondente. Una volta che un server SSH riceve una chiave pubblica da un utente e considera la chiave affidabile, il server contrassegna la chiave come autorizzata nel suo file authorized_keys.
  • la chiave privata è la chiave che resta all’utente, in questo caso particolare l’utente è la nostra istanza di Home Assistant.Solo un utente in possesso di una chiave privata che corrisponde alla chiave pubblica sul server potrà autenticarsi correttamente. Le chiavi private devono essere archiviate e gestite con cura e non devono essere distribuite.

Configurazione di client e server

Vediamo ora come generare su Home Assisstant la coppia di chiavi e come copiare la chiave pubblica sull’iMac.

Generazione delle chiavi

Come primo passo occorre generare un set di chiavi SSH su Home Assistant, se già è stato creato questo set si può saltare questo passaggio, in caso contrario, occorre generare le chiavi eseguendo quanto segue (sostituendo [nota] con una tua nota o commento, ovviamente):

  • Generazione chiavi su HA, attraverso la shell disponibile con l’addon SSH della community mettendo share_sessions: false come parametro di configurazione, il comando da digitare è ssh-keygen -t rsa -C "[nota]"

Non è necessario aggiungere nessuna password alla chiave. Questa guida presume che le nuove chiavi siano nella directory suggerita, che è ~/.ssh. Dopo la creazione delle chiave occorre effettuare un modifica dei permessi alla chiave privata digitando chmod 400 ~/.ssh/id_rsa.

ATTENZIONE: è stato verificato da alcuni utenti che il percorso standard  ~/.ssh per le chiavi di crittografia potrebbe dare qualche problema nell’esecuzione di shell_command, in questo caso usate un percorso all’interno di /config ad esempio /config/.ssh e aggiornate di conseguenza tutti i percorsi.

Successivamente, occorre generare un set di chiavi SSH sul Mac al quale collegarsi, ovvero che eseguirà il comando effettuando l’accesso, in modo che venga creata la struttura di cartelle ~/.ssh necessaria, insieme al file known_hosts. Se questa operazione è stata già fatto, si puà saltare il passaggio. In caso contrario, occorre ripetere le istruzioni sopra riportate sul Mac remoto.

Occore anche aver attivato sul Mac Accesso remoto in Preferenze di Sistema Condivisione.

Copia delle chiavi pubbliche

Per copiare la chiave pubblica SSH sul Mac remoto, è possibile varie soluzioni, da una pennetta USB, ad un client FTP come Filezilla o simili, all’utilizzo del comando “cat” dalla shell disponibile con l’addon SSH di HA, vediamo come effettuare l’operazione.

Le informazioni da conoscere sono:

  • La posizione in cui è archiviata la  chiave SSH pubblica. Se è stata installata la chiave utilizzando il processo esatto descritto nel passaggio precedente, questo sarà ~/.ssh/id_rsa.pub. Se la chiave è stata salvata altrove occorre prendere nota del percorso locale.
  • L’indirizzo del Mac remoto a cui si desidera aggiungere la chiave, ad esempio 192.168.1.150.
  • Il tuo nome utente e password sul Mac remoto a cui desideri aggiungere la chiave, per controllare l’utente su Mac si  può usare il comando whoami.

Supponendo che la chiave SSH pubblica si trovi in ​​~/.ssh/id_rsa.pub, il nome utente sul Mac remoto sia pippo e l’indirizzo IP del  Mac remoto sia 192.168.1.150, è possibile copiare la chiave eseguendo da shell di HA:

cat ~/.ssh/id_rsa.pub | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'

Poichè l’accesso SSH tramite certificato non è ancora stato configurato il sistema richiederà la password dell’account pippo dopo aver premuto Invio.

Test

Ora è possibile accedere in maniera diretta al Mac. Per fare ciò, si digita ssh seguito dal nome utente e dall’indirizzo IP o nome DNS locale, se configurato, del Mac remoto. Nel nostro esempio, sarebbe: ssh [email protected].

Configurazioni Home Assistant

Compilazione secrets.yaml

La configurazione per HA si basa sull’inserimento nel file secrets.yaml dei comandi necessari per effettuare le operazioni di seguito descritte, ma è possibile implementare molte altre funzionalità o sensori:

  • Shutdown
  • Modalità Sleep
  • Riavvio
  • Percentuale di spazio disco occupato
  • Percentuale di uso della CPU
  • Orario dell’ultimo avvio del Mac

Per eseguire il reboot o lo shutdown del Mac useremo AppleScript che ci permette di non inserire l’utente pippo (che ovviamente va cambiato con l’utent reale insieme all’indirizzo IP del Mac) tra gli utenti con privilegi. Ed ecco cosa inserire in secret.yaml:

Per quanto riguarda lo spazio occupato dai Backup Time Machine con l’ultima versione Apple BigSur sono cambiate alcune cose quindi la modalità precedente non è più attuale, per chi comunque avesse versioni precedenti dell’OS di Apple lascio il comando che restituisce lo spazio usato dal backup, se poi qualcuno ha trovato come fare con BigSur e vuole condividere, è possibile scrivere nei commenti.

N.B nella modalità proposta con comandi SSH che richiamano AppleScript, per effettuare le operazioni descritte è necessario essere loggato sul Mac con lo stesso utente che esegue lo script. Da tenere anche presente che i test sono stati effettuati con macOS BigSur, con precedenti versioni potrebbe essere necessario variare dei comandi.

Sensori e script

Ecco la configurazione di shell command che possono essere richiamati come servizi in automazioni/script o nelle card Lovelace tramite l’action call-service:

Di seguito i sensori della piattaforma command-line con un aggiornamento dei valori previsto ogni 5 minuti e un aggiornamento on-demand effettuabile tramite la card Lovelace. Il parametro ​​scan_interval esprime in secondi il tempo tra due aggiornamenti ed è variabile secondo il proprio gusto.

Lovelace Card

Di seguito invece l’implementazione di una card per visualizzare sulla UI Loveace quanto è stato fatto, sono state usate alcune custom card scaricabili da HACS, da notare che cliccando sulle bar-card viene effettuato l’aggiornamento dei sensori.

Sensori Mac

Sensori Mac


Esecuzione di comandi Superuser

Un’altra strada da seguire per l’esecuzione di comandi che richiedono “privilegi amministrativi” come il riavvio dell’host è quella di permettere ad un normale utente, nel nostro caso pippo, l’uso di “sudo” (“superuser do”)

“sudo” è uno “strumento” per eseguire comandi/programmi come un altro utente, tipicamente dotato di privilegi superiori. Per impostazione predefinita, sudo richiede che un utente si autentichi utilizzando una password prima di eseguire un comando. Nel nostro caso occorre evitare questa cosa e ciò si ottiene modificando il file /etc/sudoers.

Questa è un procedura “delicata” dal punto di vista della sicurezza, per cui si raccomanda di valutare attentamente le conseguenze derivanti dal consentire l’esecuzione di un comando sudo senza password.

  1. passare ad un account “amministrativo”, che potrebbe essere anche il solito pippo, su [ADMIN_ACCOUNT]
  2. Eseguire sudo cat /etc/sudoers e verificare che la seguente riga sia presente  #includedir /private/etc/sudoers.d
  3. Usare il comando visudo per creare un nuovo file sudoers: sudo visudo -f /etc/sudoers.d/sudoers
  4. Premere il tasto i per la modalità di inserimento, quindi digitare la riga per ALL = (ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown abilitare solo i comandi specifici che è sicuramente la procedura da preferire piuttosto che permettere l’esecuzione di un qualsiasi comando “sudo” in maniera indiscriminata.
  5. Premere ESC, quindi digitare :x seguito dal tasto INVIO per salvare le modifiche
  6. Verificare le modifiche eseguendo sudo cat /etc/sudoers.d/sudoers
  7. Eseguire exit per disconnetterti dall’account amministratore e tornare all’account pippo.

Conclusioni

L’articolo ha illustrato un metodo per richiamare in maniera semplice comandi o AppleScript presenti su host remoti con lo scopo di recuperare informazioni o eseguire azioni e comandi.

Le configurazioni presentate per Apple Mac sono sostanzialmente uguali per PC/server/Raspberry dotati di sistemi operativi Linux, quindi non sono state riportate, ma con un minimo di lavoro si potrà adattare quanto presente nell’articolo alle proprie necessità.

Ricordo infine che gli articoli devono essere fonte di sviluppo e riflessione per poter creare le proprie configurazioni e personalizzazioni: quello che va bene per me nella mia infrastruttura non è detto che sia replicabile integralmente per voi nella vostra.

Se avete qualcosa da suggerire ci vediamo nei gruppi Telegram e Facebook.


Sostienici, dona un caffè al nostro sito

 

2 risposte

  1. Ivan ha detto:

    Ottima guida!
    La killer feature sarebbe intercettare lo stato del microfono, o di teams per individuare se si è in call sul mac, così da scatenare qualche azione in casa!

    • Giampi ha detto:

      Grazie! beh se trovi tramite Apple Script o altro un comando che restituisce lo stato non dovrebbe essere difficile integrarlo. In casi simili in cui ti interessa sapere un qualche stato del Mac può essere di aiuto anche la companion app di HA per Mac!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Advertisment ad adsense adlogger