<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Enrico Marogna</title>
      <link>https://enricomarogna.com</link>
      <description>Cybersecurity Professional and Web Developer | OSCP</description>
      <generator>Zola</generator>
      <language>it</language>
      <atom:link href="https://enricomarogna.com/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 09 Nov 2024 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Proteggere un sito con autenticazione HTTP su Apache</title>
          <pubDate>Sat, 09 Nov 2024 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/apache-auth/</link>
          <guid>https://enricomarogna.com/blog/apache-auth/</guid>
          <description xml:base="https://enricomarogna.com/blog/apache-auth/">&lt;h2 id=&quot;proteggere-le-directory-apache-con-l-autenticazione-di-base&quot;&gt;Proteggere le Directory Apache con l&#39;Autenticazione di Base&lt;/h2&gt;
&lt;p&gt;Se gestisci un sito web con Apache e hai bisogno di limitare l&#39;accesso ad alcune directory, l&#39;autenticazione di base rappresenta una soluzione semplice ed efficace. Questa guida ti spiegherà come configurare l&#39;autenticazione di base su Apache per proteggere i tuoi contenuti con un file .htpasswd.&lt;/p&gt;
&lt;h2 id=&quot;installazione-degli-strumenti-apache&quot;&gt;Installazione degli Strumenti Apache&lt;/h2&gt;
&lt;p&gt;Per iniziare, assicurati che il sistema sia aggiornato e installa &lt;code&gt;apache2-utils&lt;/code&gt;, che include &lt;code&gt;htpasswd&lt;/code&gt;, uno strumento per gestire le credenziali degli utenti:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; apt update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; apt install apache2-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;creazione-degli-utenti&quot;&gt;Creazione degli Utenti&lt;/h2&gt;
&lt;p&gt;Dovrai creare un file &lt;code&gt;.htpasswd&lt;/code&gt; per gestire gli utenti autorizzati. Puoi creare questo file e aggiungere il primo utente con il comando seguente:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; htpasswd&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /etc/apache2/.htpasswd username&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L&#39;opzione &lt;code&gt;-c&lt;/code&gt; crea un nuovo file &lt;code&gt;.htpasswd&lt;/code&gt;. Se devi aggiungere altri utenti, esegui il comando senza &lt;code&gt;-c&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; htpasswd /etc/apache2/.htpasswd username2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ogni volta che esegui questi comandi, ti verrà richiesto di inserire e confermare una password per l&#39;utente specificato.&lt;/p&gt;
&lt;h2 id=&quot;configurazione-del-file-apache&quot;&gt;Configurazione del File Apache&lt;/h2&gt;
&lt;p&gt;Ora, devi modificare la configurazione del sito per abilitare l&#39;autenticazione. Apri il file di configurazione del tuo dominio con nano o un altro editor di testo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/apache2/sites-available/your_domain.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;configurazione-predefinita&quot;&gt;Configurazione Predefinita&lt;/h3&gt;
&lt;p&gt;Ecco un esempio di configurazione predefinita:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;apache&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;VirtualHost&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; *:80&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerAdmin&lt;/span&gt;&lt;span&gt; webmaster@localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerName&lt;/span&gt;&lt;span&gt; your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerAlias&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; www.your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    DocumentRoot&lt;/span&gt;&lt;span&gt; /var/www/your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ErrorLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}/error.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    CustomLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}/access.log combined&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Directory&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/var/www/your_domain&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Directory&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;VirtualHost&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;aggiunta-dell-autenticazione&quot;&gt;Aggiunta dell&#39;Autenticazione&lt;/h3&gt;
&lt;p&gt;Modifica la sezione &lt;Directory&gt; per abilitare l&#39;autenticazione di base:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;apache&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;VirtualHost&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; *:80&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerAdmin&lt;/span&gt;&lt;span&gt; webmaster@localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerName&lt;/span&gt;&lt;span&gt; your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ServerAlias&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; www.your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    DocumentRoot&lt;/span&gt;&lt;span&gt; /var/www/your_domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    ErrorLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}/error.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    CustomLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}/access.log combined&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Directory&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/var/www/your_domain&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        AuthType&lt;/span&gt;&lt;span&gt; Basic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        AuthName&lt;/span&gt;&lt;span&gt; &amp;quot;Restricted Content&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        AuthUserFile&lt;/span&gt;&lt;span&gt; /etc/apache2/.htpasswd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        Require&lt;/span&gt;&lt;span&gt; valid-user&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Directory&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;VirtualHost&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ecco cosa fanno queste direttive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AuthType Basic&lt;/code&gt;: Specifica il tipo di autenticazione (di base).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthName&lt;/code&gt;: Il messaggio visualizzato nel prompt di accesso.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthUserFile&lt;/code&gt;: Il percorso al file .htpasswd creato in precedenza.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Require valid-user&lt;/code&gt;: Richiede che l&#39;utente fornisca credenziali valide.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;verifica-della-configurazione&quot;&gt;Verifica della Configurazione&lt;/h2&gt;
&lt;p&gt;Per assicurarti che la configurazione di Apache sia corretta, esegui:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; apache2ctl configtest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se non ci sono errori, dovresti vedere un messaggio che conferma che la sintassi del file è corretta.&lt;/p&gt;
&lt;h2 id=&quot;riavvio-di-apache&quot;&gt;Riavvio di Apache&lt;/h2&gt;
&lt;p&gt;Per applicare le modifiche, riavvia Apache:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; systemctl restart apache2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ora, quando qualcuno tenterà di accedere alla directory protetta, verrà richiesto di inserire un nome utente e una password.&lt;/p&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;L&#39;autenticazione di base è un ottimo modo per proteggere le sezioni sensibili del tuo sito web con credenziali semplici. Tuttavia, ricorda che questo metodo non cifra i dati. Per una maggiore sicurezza, considera di utilizzare HTTPS per proteggere le comunicazioni tra il server e i client.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Sincronizzare un sito, da un server ad un altro, con uno script Bash</title>
          <pubDate>Sat, 24 Aug 2024 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/sincronizzare-siti-con-bash/</link>
          <guid>https://enricomarogna.com/blog/sincronizzare-siti-con-bash/</guid>
          <description xml:base="https://enricomarogna.com/blog/sincronizzare-siti-con-bash/">&lt;p&gt;Quando si gestisce un sito, può rendersi necessario spostarlo o sincronizzarlo da un server a un altro. Ad esempio, si potrebbe voler replicare il sito in un ambiente di staging o trasferirlo su un nuovo hosting. In questo articolo, vedremo uno script bash che automatizza questo processo.&lt;/p&gt;
&lt;h2 id=&quot;introduzione&quot;&gt;Introduzione&lt;/h2&gt;
&lt;p&gt;Lo script che presento qui permette di sincronizzare un sito da un server sorgente (SOURCE) a un server di destinazione (DESTINATION); effettua una copia dei file del sito e del database MySQL/Mariadb, sostituisce l&#39;URL del sito nel dump del database e lo importa sul server di destinazione. Lo esamineremo passo dopo passo per poi vedere il codice completo.&lt;/p&gt;
&lt;h2 id=&quot;configurazione-dello-script&quot;&gt;Configurazione dello Script&lt;/h2&gt;
&lt;p&gt;Per utilizzare lo script, è necessario configurare alcune variabili che definiscono i percorsi e le credenziali sia del sito sorgente che di quello di destinazione.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In questo esempio si considera un sito WordPress, ma lo script può essere adattato per qualsiasi tipo di sito&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ecco la sezione di configurazione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Configurazione&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_PATH&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;/var/www/source.domain.com/wordpress&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;db_source_domain_name&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_URL&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;source.domain.com&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;nome_utente&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;192.168.0.6&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_PATH&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;/var/www/destination.domain.com/wordpress&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;db_destination_domain_name&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_URL&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;destination.domain.com&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SOURCE_PATH&lt;/code&gt;: Percorso completo della cartella del sito sorgente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SOURCE_DB_NAME&lt;/code&gt;: Nome del database MySQL del sito sorgente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SOURCE_URL&lt;/code&gt;: URL del sito sorgente (senza http:// o https://).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTINATION_USER&lt;/code&gt;: Nome utente per accedere al server di destinazione via SSH.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTINATION_HOST&lt;/code&gt;: Indirizzo IP o nome del server di destinazione.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTINATION_PATH&lt;/code&gt;: Percorso completo della cartella del sito di destinazione.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTINATION_DB_NAME&lt;/code&gt;: Nome del database MySQL del sito di destinazione.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTINATION_URL&lt;/code&gt;: URL del sito di destinazione (senza http:// o https://).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;come-funziona-lo-script&quot;&gt;Come Funziona lo Script&lt;/h2&gt;
&lt;h3 id=&quot;1-gestione-degli-errori&quot;&gt;1. Gestione degli Errori&lt;/h3&gt;
&lt;p&gt;Lo script include una funzione &lt;code&gt;handle_error&lt;/code&gt; che gestisce eventuali errori durante l&#39;esecuzione. Se uno dei comandi restituisce un errore, la funzione viene chiamata e lo script termina pulendo eventuali file temporanei creati.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; handle_error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Errore su riga &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    rm&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /tmp/&lt;/span&gt;&lt;span&gt;${SOURCE_DB_NAME}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.sql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;rm -f /tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;trap&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;handle_error $LINENO&amp;#39; ERR&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;trap&lt;/code&gt;: Comando per impostare un&#39;azione da eseguire quando si verifica un errore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-verifica-delle-dipendenze&quot;&gt;2. Verifica delle Dipendenze&lt;/h3&gt;
&lt;p&gt;Prima di iniziare la sincronizzazione, lo script verifica che i comandi essenziali (&lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;, &lt;code&gt;mysqldump&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;) siano installati sulla macchina di origine.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;/span&gt;&lt;span&gt; cmd&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ssh rsync mysqldump sed scp mysql&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if !&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; command -v&lt;/span&gt;&lt;span&gt; $cmd &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; /dev/null;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Errore: il comando &amp;#39;&lt;/span&gt;&lt;span&gt;$cmd&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39; non è installato.&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;3-richiesta-di-conferma&quot;&gt;3. Richiesta di Conferma&lt;/h3&gt;
&lt;p&gt;Lo script informa l&#39;utente su cosa farà e chiede conferma per procedere.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Questo script sincronizza un sito web da un server SOURCE a un server DESTINATION.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;read -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Vuoi continuare? (s/n): &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -n 1 -r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [[&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !&lt;/span&gt;&lt;span&gt; $REPLY&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =~&lt;/span&gt;&lt;span&gt; ^[Ss]$ ]];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Operazione annullata.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;4-sincronizzazione-dei-file&quot;&gt;4. Sincronizzazione dei File&lt;/h3&gt;
&lt;p&gt;Utilizzando &lt;a rel=&quot;external&quot; href=&quot;https://rsync.samba.org/&quot;&gt;rsync&lt;/a&gt;, lo script copia tutti i file dal percorso del sito sorgente a quello di destinazione, escludendo eventuali cartelle di cache.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rsync&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -avz --delete --no-times --no-perms --exclude&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;cache/&amp;#39; &amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_PATH&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}/&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}:${&lt;/span&gt;&lt;span&gt;DESTINATION_PATH&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}/&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-a&lt;/code&gt;: Opzione per copiare i file in modalità archivio, mantenendo i permessi, le proprietà e i timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;: Opzione per visualizzare l&#39;output dettagliato.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-z&lt;/code&gt;: Opzione per comprimere i dati durante il trasferimento.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--delete&lt;/code&gt;: Opzione per eliminare i file sul server di destinazione che non esistono più sul server sorgente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--no-times&lt;/code&gt;: Opzione per non copiare i timestamp dei file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--no-perms&lt;/code&gt;: Opzione per non copiare i permessi dei file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--exclude &#39;cache/&#39;&lt;/code&gt;: Opzione per escludere la cartella &lt;code&gt;cache/&lt;/code&gt; dal trasferimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-dump-e-modifica-del-database&quot;&gt;5. Dump e Modifica del Database&lt;/h3&gt;
&lt;p&gt;Lo script esegue il dump del database MySQL sul server sorgente, sostituisce l&#39;URL del sito sorgente con quello di destinazione e trasferisce il dump al server di destinazione.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mysqldump&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -u&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sed&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;s|${&lt;/span&gt;&lt;span&gt;SOURCE_URL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}|${&lt;/span&gt;&lt;span&gt;DESTINATION_URL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}|g&amp;quot; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;scp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}:/tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mysqldump&lt;/code&gt;: Comando per eseguire il dump del database MySQL.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sed&lt;/code&gt;: Comando per sostituire il nome del sito nel dump del database.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scp&lt;/code&gt;: Comando per copiare il dump del database modificato dal server sorgente a quello di destinazione.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;6-importazione-del-database&quot;&gt;6. Importazione del Database&lt;/h3&gt;
&lt;p&gt;Infine, il database viene importato sul server di destinazione e vengono eliminati i file temporanei.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;mysql -u root -p&amp;#39;${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;#39; ${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;} &amp;lt; /tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;script-completo&quot;&gt;Script Completo&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# LO SCRIPT DEVE ESSERE ESEGUITO SUL SERVER &amp;quot;SOURCE&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ========================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Configurazione&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Modifica i valori delle variabili con i tuoi dati&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ATTENZIONE: gli URL devono essere inseriti senza http:// o https:// e senza slash finale, es. &amp;quot;example.com&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ========================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_PATH&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;/var/www/source.domain.com/wordpress&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;db_source_domain_name&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOURCE_URL&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;source.domain.com&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;nome_utente&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;192.168.0.6&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_PATH&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;/var/www/destination.domain.com/wordpress&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;db_destination_domain_name&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTINATION_URL&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;destination.domain.com&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ========================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Funzione per la gestione degli errori&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; handle_error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Errore su riga &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # Pulizia in caso di errore&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    rm&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /tmp/&lt;/span&gt;&lt;span&gt;${SOURCE_DB_NAME}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.sql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;rm -f /tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Imposta il trap per gestire gli errori&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;trap&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;handle_error $LINENO&amp;#39; ERR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Verifica le dipendenze&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;/span&gt;&lt;span&gt; cmd&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ssh rsync mysqldump sed scp mysql&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if !&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; command -v&lt;/span&gt;&lt;span&gt; $cmd &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; /dev/null;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Errore: il comando &amp;#39;&lt;/span&gt;&lt;span&gt;$cmd&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39; non è installato.&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Spiega cosa fa lo script e chiedi all&amp;#39;utente se vuole continuare o meno&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Questo script sincronizza un sito web da un server SOURCE a un server DESTINATION.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Il sito web sarà copiato da SOURCE a DESTINATION e il database sarà esportato da SOURCE, modificato e importato su DESTINATION.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;read -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Vuoi continuare? (s/n): &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -n 1 -r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [[&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !&lt;/span&gt;&lt;span&gt; $REPLY&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =~&lt;/span&gt;&lt;span&gt; ^[Ss]$ ]];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Operazione annullata.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Chiede la password del database di SOURCE e DESTINATION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;read -s -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Inserisci la password del database di SOURCE: &amp;quot; SOURCE_DB_PASS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;read -s -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Inserisci la password del database di DESTINATION: &amp;quot; DESTINATION_DB_PASS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Controllo che le password non siano vuote&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [[&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -z&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; || -z&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot;&lt;/span&gt;&lt;span&gt; ]];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Errore: una o entrambe le password sono vuote.&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Controllo la connessione al server DESTINATION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Controllo la connessione al server DESTINATION...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if !&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; exit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Impossibile connettersi al server DESTINATION!&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Copia i file dal server SOURCE al server DESTINATION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Copia dei file da SOURCE a DESTINATION...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rsync&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -avz --delete --no-times --no-perms --exclude&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;cache/&amp;#39; &amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_PATH&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}/&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}:${&lt;/span&gt;&lt;span&gt;DESTINATION_PATH&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}/&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Dump del database su SOURCE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Eseguo il dump del database su SOURCE...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mysqldump&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -u&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Sostituisci il nome del sito nel dump del database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Sostituisco il nome del sito nel dump del database...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sed&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;s|${&lt;/span&gt;&lt;span&gt;SOURCE_URL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}|${&lt;/span&gt;&lt;span&gt;DESTINATION_URL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}|g&amp;quot; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Copia del dump del database modificato da SOURCE a DESTINATION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Copia del dump del database modificato da SOURCE a DESTINATION...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;scp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}:/tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Importa il database su DESTINATION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Importo il database su DESTINATION...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;mysql -u root -p&amp;#39;${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_PASS&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;#39; ${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;} &amp;lt; /tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Rimuovi i file temporanei&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Pulizia dei file temporanei...&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/tmp/${&lt;/span&gt;&lt;span&gt;SOURCE_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;${&lt;/span&gt;&lt;span&gt;DESTINATION_USER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}@${&lt;/span&gt;&lt;span&gt;DESTINATION_HOST&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}&amp;quot; &amp;quot;rm -f /tmp/${&lt;/span&gt;&lt;span&gt;DESTINATION_DB_NAME&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.sql&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Sincronizzazione completata!&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;esecuzione-dello-script&quot;&gt;Esecuzione dello Script&lt;/h3&gt;
&lt;p&gt;Per eseguire lo script, è necessario salvare il codice in un file &lt;strong&gt;.sh&lt;/strong&gt;, ad esempio &lt;code&gt;sync_wordpress.sh&lt;/code&gt;, e renderlo eseguibile:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; +x sync_wordpress.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;./sync_wordpress.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;considerazioni-finali&quot;&gt;Considerazioni Finali&lt;/h2&gt;
&lt;p&gt;Per ulteriori necessità di personalizzazione, lo script può essere facilmente adattato per includere altre funzionalità o per gestire scenari più complessi e ricorda che &lt;strong&gt;è sempre consigliabile eseguire un backup completo del sito prima di eseguire operazioni di sincronizzazione o migrazione&lt;/strong&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Incrementare il volume di un container LXC su Proxmox</title>
          <pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/incremento-volume-xlc/</link>
          <guid>https://enricomarogna.com/blog/incremento-volume-xlc/</guid>
          <description xml:base="https://enricomarogna.com/blog/incremento-volume-xlc/">&lt;p&gt;In Proxmox, potrebbe essere necessario aumentare lo spazio su disco di un container LXC per gestire più dati o migliorare le prestazioni. Questa guida illustra i passaggi necessari per incrementare il volume di un LXC, verificare i volumi esistenti, ridimensionare il file system e aggiornare la configurazione del container.&lt;/p&gt;
&lt;h2 id=&quot;verifica-e-arresto-del-container&quot;&gt;Verifica e arresto del container&lt;/h2&gt;
&lt;p&gt;Prima di effettuare modifiche a un container LXC, è necessario individuarlo e fermarlo. Utilizzare il seguente comando per elencare tutti i container presenti nel sistema:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una volta identificato l&#39;ID del container LXC, è possibile arrestarlo utilizzando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;controllo-del-percorso-del-volume-logico&quot;&gt;Controllo del percorso del volume logico&lt;/h2&gt;
&lt;p&gt;Dopo aver fermato il container, è necessario individuare il percorso del volume logico associato al container specifico. Utilizzare il comando &lt;code&gt;lvdisplay&lt;/code&gt; per trovare il volume, filtrandolo con il comando grep:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;lvdisplay&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;vm-&amp;lt;ID-LXC&amp;gt;-disk-0&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando restituisce il percorso completo del volume logico su cui risiede il container.&lt;/p&gt;
&lt;h2 id=&quot;controllo-del-file-system&quot;&gt;Controllo del file system&lt;/h2&gt;
&lt;p&gt;Prima di ridimensionare il volume logico, è consigliabile eseguire un controllo del file system per verificare l&#39;integrità dei dati. Questo passaggio previene eventuali problemi durante il processo di ridimensionamento. Il controllo del file system può essere eseguito con il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;e2fsck&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fy&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /dev/pve/vm-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;-disk-0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;ridimensionamento-del-volume-logico&quot;&gt;Ridimensionamento del volume logico&lt;/h2&gt;
&lt;p&gt;Una volta completato il controllo del file system, si può procedere con il ridimensionamento del volume logico. Specificare la nuova dimensione desiderata sostituendo &lt;code&gt;XXG&lt;/code&gt; con la quantità di spazio desiderata in gigabyte:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;lvresize&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --size&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; XXG /dev/pve/vm-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;-disk-0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;ridimensionamento-del-file-system&quot;&gt;Ridimensionamento del file system&lt;/h2&gt;
&lt;p&gt;Dopo aver aumentato la dimensione del volume logico, è necessario espandere il file system per utilizzare lo spazio aggiuntivo. Questo viene fatto con il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;resize2fs&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /dev/pve/vm-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;-disk-0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;modifica-della-configurazione-del-container&quot;&gt;Modifica della configurazione del container&lt;/h2&gt;
&lt;p&gt;Successivamente, è necessario aggiornare il file di configurazione del container per riflettere le nuove dimensioni del volume. Aprire il file di configurazione del container con il seguente comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;nano&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /etc/pve/lxc/&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nel file di configurazione, individuare la riga &lt;code&gt;rootfs&lt;/code&gt; e aggiornare la dimensione del volume:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rootfs:&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; local-lvm:vm-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;-disk-0,size=XXG&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sostituire &lt;code&gt;XXG&lt;/code&gt; con la nuova dimensione impostata nel passaggio precedente.&lt;/p&gt;
&lt;h2 id=&quot;riavvio-del-container&quot;&gt;Riavvio del container&lt;/h2&gt;
&lt;p&gt;Infine, è possibile riavviare il container per applicare tutte le modifiche effettuate:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;ID-LX&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;conclusione&quot;&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;Questi passaggi consentono di incrementare correttamente il volume di un container LXC su Proxmox, garantendo che lo spazio aggiuntivo sia correttamente allocato e utilizzato dal sistema. È sempre consigliabile eseguire backup regolari prima di apportare modifiche a un sistema di produzione.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Impostare i permessi dei file e delle cartelle su WordPress</title>
          <pubDate>Wed, 17 Apr 2024 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/impostare-permessi-file-cartelle-wordpress/</link>
          <guid>https://enricomarogna.com/blog/impostare-permessi-file-cartelle-wordpress/</guid>
          <description xml:base="https://enricomarogna.com/blog/impostare-permessi-file-cartelle-wordpress/">&lt;p&gt;Quando si gestisce un sito WordPress, è fondamentale garantire che i permessi dei file e delle directory siano impostati correttamente per mantenere la sicurezza e la funzionalità del sito. Una configurazione errata può esporre il sito a potenziali attacchi, mentre permessi troppo restrittivi possono impedire al sito di funzionare correttamente.&lt;/p&gt;
&lt;p&gt;Vediamo uno script Bash che consente di configurare i permessi ideali per un sito WordPress, assicurando che siano impostati in modo sicuro e conforme alle migliori pratiche.&lt;/p&gt;
&lt;h2 id=&quot;perche-i-permessi-sono-importanti&quot;&gt;Perché i permessi sono importanti&lt;/h2&gt;
&lt;p&gt;In un ambiente server, i permessi determinano chi può leggere, scrivere ed eseguire file e directory. Per un sito WordPress, una corretta impostazione dei permessi aiuta a prevenire:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accessi non autorizzati ai file critici.&lt;/li&gt;
&lt;li&gt;Modifiche accidentali o malevole ai file.&lt;/li&gt;
&lt;li&gt;Problemi di funzionamento dovuti a permessi insufficienti.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;panoramica-dello-script&quot;&gt;Panoramica dello Script&lt;/h2&gt;
&lt;p&gt;Lo script proposto è progettato per essere eseguito da un utente con privilegi di root e configura automaticamente i permessi su un&#39;installazione WordPress esistente. Ecco come funziona:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proprietà dei file&lt;/strong&gt;: I file e le directory vengono assegnati all&#39;utente e al gruppo &lt;code&gt;www-data&lt;/code&gt;, che è tipicamente l&#39;utente del web server su sistemi basati su Linux.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permessi di directory&lt;/strong&gt;: Tutte le directory vengono impostate con permessi &lt;code&gt;755&lt;/code&gt;, che consentono al proprietario di leggere, scrivere ed eseguire, mentre altri utenti possono solo leggere ed eseguire.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permessi dei file&lt;/strong&gt;: Tutti i file vengono impostati con permessi &lt;code&gt;644&lt;/code&gt;, che consentono al proprietario di leggere e scrivere, mentre altri utenti possono solo leggere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permessi speciali&lt;/strong&gt;: I file &lt;code&gt;wp-config.php&lt;/code&gt; e &lt;code&gt;.htaccess&lt;/code&gt; ricevono permessi più restrittivi per proteggere le informazioni sensibili e garantire che solo l&#39;utente del web server possa gestirli.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;script-bash-per-impostare-i-permessi&quot;&gt;Script bash per impostare i permessi&lt;/h2&gt;
&lt;p&gt;Di seguito è riportato lo script Bash:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Verifica se lo script è stato eseguito come root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$EUID&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -ne&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Per favore, esegui questo script come root&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  exit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Richiede il nome del dominio per cui si vogliono impostare i permessi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Inserisci il nome del dominio per cui vuoi settare i permessi (esempio.com oppure sub.esempio.com):&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;read -p&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Dominio: &amp;quot; domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Variabili per i permessi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WP_OWNER&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;www-data&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- proprietario wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WP_GROUP&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;www-data&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- gruppo wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WP_ROOT&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/var/www/&lt;/span&gt;&lt;span&gt;$domain&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wordpress&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- percorso wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WS_GROUP&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;www-data&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- gruppo web server&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Reset dei permessi predefiniti&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chown&lt;/span&gt;&lt;span&gt; ${WP_OWNER}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;:&lt;/span&gt;&lt;span&gt;${WP_GROUP}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta il proprietario e il gruppo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -type&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 755&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi delle directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -type&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 644&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi dei file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Imposta i permessi speciali &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chgrp&lt;/span&gt;&lt;span&gt; ${WS_GROUP} ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wp-config.php&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta il gruppo di wp-config.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 640&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wp-config.php&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi di wp-config.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Crea il file .htaccess se non esiste e imposta i permessi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;touch&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/.htaccess&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- crea il file .htaccess se non esiste&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chgrp&lt;/span&gt;&lt;span&gt; ${WS_GROUP} ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/.htaccess&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta il gruppo del file .htaccess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 644&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/.htaccess&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi del file .htaccess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# Imposta i permessi di wp-content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wp-content&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chown&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R&lt;/span&gt;&lt;span&gt; ${WP_OWNER}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;:&lt;/span&gt;&lt;span&gt;${WS_GROUP}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta il proprietario e il gruppo di wp-content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wp-content&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -type&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 775&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi delle directory di wp-content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;find&lt;/span&gt;&lt;span&gt; ${WP_ROOT}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/wp-content&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -type&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -exec&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 664&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; {}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- imposta i permessi dei file di wp-content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;I permessi sono stati impostati correttamente&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # &amp;lt;-- messaggio di conferma&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;come-utilizzare-lo-script&quot;&gt;Come Utilizzare lo Script&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Salva lo script: Salva il codice in un file, ad esempio imposta-permessi.sh.&lt;/li&gt;
&lt;li&gt;Rendi eseguibile lo script: Usa il comando chmod +x imposta-permessi.sh per renderlo eseguibile.&lt;/li&gt;
&lt;li&gt;Esegui lo script: Esegui lo script come root o utilizzando sudo, con il comando sudo ./imposta-permessi.sh.&lt;/li&gt;
&lt;li&gt;Inserisci il dominio: Quando richiesto, inserisci il nome del dominio del sito WordPress per il quale desideri configurare i permessi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;Conclusioni&lt;/h2&gt;
&lt;p&gt;Impostare correttamente i permessi su un sito WordPress è una pratica essenziale per garantire la sicurezza e il corretto funzionamento del sito. Lo script fornito è un ottimo punto di partenza per automatizzare questo processo e assicurarsi che i permessi siano impostati secondo le migliori pratiche.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Recupero IP Originali con il Modulo Apache remoteip</title>
          <pubDate>Wed, 17 Apr 2024 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/recupero-ip-originali-con-modulo-apache-remoteip/</link>
          <guid>https://enricomarogna.com/blog/recupero-ip-originali-con-modulo-apache-remoteip/</guid>
          <description xml:base="https://enricomarogna.com/blog/recupero-ip-originali-con-modulo-apache-remoteip/">&lt;p&gt;Quando si utilizza un servizio di proxy come Cloudflare, è possibile che l&#39;indirizzo IP registrato nei log del server Apache non sia l&#39;IP reale del visitatore, ma quello del proxy. Questo può rendere complesso monitorare il traffico reale verso il sito. Grazie al modulo remoteip di Apache, è possibile ripristinare l&#39;indirizzo IP originale del visitatore nei log. Questa guida illustra come abilitare e configurare correttamente il modulo remoteip per ottenere gli IP reali dei visitatori.&lt;/p&gt;
&lt;h2 id=&quot;1-abilitazione-del-modulo-remoteip&quot;&gt;1. Abilitazione del modulo remoteip&lt;/h2&gt;
&lt;p&gt;Il modulo remoteip deve essere abilitato sulla macchina. Se non lo è già, è possibile attivarlo con il seguente comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; a2enmod remoteip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando consente di abilitare il modulo remoteip, necessario per sostituire l&#39;indirizzo IP del proxy con l&#39;IP originale del visitatore.&lt;/p&gt;
&lt;h2 id=&quot;2-configurazione-del-file-di-configurazione-di-apache&quot;&gt;2. Configurazione del file di configurazione di Apache&lt;/h2&gt;
&lt;p&gt;È necessario aggiungere l&#39;intestazione RemoteIPHeader al file di configurazione di Apache per specificare quale header HTTP contiene l&#39;IP originale del visitatore. Con Cloudflare, viene utilizzata l&#39;intestazione &lt;code&gt;CF-Connecting-IP&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si procede con l&#39;apertura del file di configurazione del sito. Ad esempio, se il file di configurazione si trova in &lt;code&gt;/etc/apache2/sites-available/sub.dominio.it-le-ssl.conf&lt;/code&gt;, è possibile modificarlo con il seguente comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/apache2/sites-available/sub.dominio.it-le-ssl.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;All&#39;interno del blocco &lt;VirtualHost&gt;, si aggiunge la seguente direttiva:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ServerAdmin&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; webmaster@localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;DocumentRoot&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /var/www/html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ServerName&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; remoteip.andy.support&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;RemoteIPHeader&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; CF-Connecting-IP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ErrorLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/error.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;CustomLog&lt;/span&gt;&lt;span&gt; ${APACHE_LOG_DIR}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/access.log combined&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa configurazione consente ad Apache di leggere l&#39;header &lt;code&gt;CF-Connecting-IP&lt;/code&gt; e registrare correttamente l&#39;indirizzo IP originale del visitatore.&lt;/p&gt;
&lt;h2 id=&quot;3-aggiornamento-del-formato-dei-log-di-apache&quot;&gt;3. Aggiornamento del formato dei log di Apache&lt;/h2&gt;
&lt;p&gt;Per garantire che gli indirizzi IP siano correttamente registrati nei file di log, è necessario aggiornare il formato dei log di Apache. Di default, Apache utilizza il placeholder %h per indicare l&#39;IP dell&#39;host che si connette al server, ma questo potrebbe non riflettere l&#39;IP originale del visitatore. È quindi opportuno sostituire &lt;code&gt;%h&lt;/code&gt; con &lt;code&gt;%a&lt;/code&gt;, che rappresenta l&#39;IP effettivo corretto dopo l&#39;elaborazione da parte del modulo remoteip.&lt;/p&gt;
&lt;p&gt;Il file di configurazione principale di Apache &lt;code&gt;/etc/apache2/apache2.conf&lt;/code&gt; deve essere modificato:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/apache2/apache2.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si sostituiscono tutte le occorrenze di &lt;code&gt;%h&lt;/code&gt; con &lt;code&gt;%a&lt;/code&gt; nelle direttive &lt;code&gt;LogFormat&lt;/code&gt;. Ad esempio, si modifica la riga seguente:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;LogFormat&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;%h %l %u %t &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%r&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; %&amp;gt;s %O &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%{Referer}i&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot; \&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%{User-Agent}i&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot; combined&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;LogFormat&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;%a %l %u %t &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%r&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; %&amp;gt;s %O &lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%{Referer}i&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot; \&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;%{User-Agent}i&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot; combined&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In questo modo, gli indirizzi IP originali verranno correttamente registrati nei file di log.&lt;/p&gt;
&lt;h2 id=&quot;4-creazione-del-file-di-configurazione-remoteip-conf&quot;&gt;4. Creazione del file di configurazione remoteip.conf&lt;/h2&gt;
&lt;p&gt;Se non è già stato creato, è necessario generare un nuovo file di configurazione chiamato &lt;code&gt;remoteip.conf&lt;/code&gt; in &lt;code&gt;/etc/apache2/conf-available/&lt;/code&gt; per gestire le configurazioni globali del modulo remoteip.&lt;/p&gt;
&lt;p&gt;Il file può essere creato eseguendo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/apache2/conf-available/remoteip.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al suo interno va inserita la seguente configurazione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;RemoteIPHeader&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; CF-Connecting-IP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;RemoteIPTrustedProxy&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 127.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa configurazione indica ad Apache di fidarsi dell&#39;header &lt;code&gt;CF-Connecting-IP&lt;/code&gt; fornito da Cloudflare, oltre che del server stesso (&lt;code&gt;127.0.0.1&lt;/code&gt;), che potrebbe fungere da proxy locale.&lt;/p&gt;
&lt;h2 id=&quot;5-abilitazione-del-file-di-configurazione-remoteip-conf&quot;&gt;5. Abilitazione del file di configurazione remoteip.conf&lt;/h2&gt;
&lt;p&gt;Per abilitare la configurazione appena creata, si utilizza il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; a2enconf remoteip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando attiva il file di configurazione &lt;code&gt;remoteip.conf&lt;/code&gt;, applicando le modifiche al modulo remoteip.&lt;/p&gt;
&lt;h2 id=&quot;6-test-della-configurazione-di-apache&quot;&gt;6. Test della configurazione di Apache&lt;/h2&gt;
&lt;p&gt;Prima di riavviare Apache, è consigliabile eseguire un test della configurazione per verificare che non siano presenti errori di sintassi. Questo può essere fatto con il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; apache2ctl configtest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se tutto è configurato correttamente, verrà visualizzato il messaggio &lt;code&gt;Syntax OK&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;7-riavvio-di-apache&quot;&gt;7. Riavvio di Apache&lt;/h2&gt;
&lt;p&gt;Solo se il test di configurazione ha avuto esito positivo (&lt;code&gt;Syntax OK&lt;/code&gt;), è possibile riavviare Apache per applicare tutte le modifiche eseguite:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; systemctl restart apache2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;conclusione&quot;&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;Seguendo questi semplici passaggi, è possibile configurare correttamente il modulo remoteip su Apache per ripristinare l&#39;indirizzo IP originale dei visitatori, anche quando si utilizza un servizio di proxy come Cloudflare. Questa configurazione è essenziale per garantire che i log siano accurati, migliorando la gestione e la sicurezza del server.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Backup Hosting: Come Eseguire Backup Crittografati di Virtualhost</title>
          <pubDate>Sat, 22 Jul 2023 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/backup-hosting/</link>
          <guid>https://enricomarogna.com/blog/backup-hosting/</guid>
          <description xml:base="https://enricomarogna.com/blog/backup-hosting/">&lt;p&gt;Eseguire backup regolari del proprio hosting è una pratica essenziale per garantire la sicurezza e la protezione dei dati. In questo articolo viene illustrato come creare un backup crittografato di tutti i virtualhost presenti su una macchina utilizzando uno script Bash. Questo approccio consente di proteggere i dati sensibili, come i file dei siti web e i database, utilizzando crittografia sicura tramite OpenSSL.&lt;/p&gt;
&lt;h2 id=&quot;introduzione&quot;&gt;Introduzione&lt;/h2&gt;
&lt;p&gt;Lo script presentato esegue backup completi e crittografati di tutti i file associati ai virtualhost Apache e dei relativi database MySQL. Per ogni sito, viene generato un archivio contenente i dati e i dump dei database, successivamente crittografati con chiavi asimmetriche. Questo garantisce che solo chi possiede la chiave privata possa decrittare e ripristinare i dati.&lt;/p&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;Prerequisiti&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OpenSSL: Assicurarsi che OpenSSL sia installato sulla macchina.&lt;/li&gt;
&lt;li&gt;MySQL/MariaDB: Lo script esegue il backup dei database MySQL o MariaDB, ma può essere adattato per altri tipi di database.&lt;/li&gt;
&lt;li&gt;Accesso root o privilegi sudo: Lo script richiede privilegi di amministratore per accedere ai file e ai database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;preparazione-generazione-delle-chiavi-di-crittografia&quot;&gt;Preparazione: Generazione delle chiavi di crittografia&lt;/h2&gt;
&lt;p&gt;Prima di eseguire lo script, è necessario generare una coppia di chiavi RSA per la crittografia dei backup. Questa operazione può essere eseguita con il seguente comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;openssl&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; req&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -x509 -nodes -newkey&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; rsa:2048&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -keyout&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domains-key.priv.pem&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -out&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domains-key.pub.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando genera una chiave privata (&lt;code&gt;domains-key.priv.pem&lt;/code&gt;) e una chiave pubblica (&lt;code&gt;domains-key.pub.pem&lt;/code&gt;). La chiave pubblica viene utilizzata per crittografare i backup, mentre la chiave privata sarà necessaria per decrittarli.&lt;/p&gt;
&lt;h2 id=&quot;script-di-backup&quot;&gt;Script di backup&lt;/h2&gt;
&lt;p&gt;Di seguito lo script per eseguire il backup:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== VARIABILI =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DATE&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; +%Y-%m-%d-%H-%M-%S`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TARGET_FOLDER&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/var/www_backups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUBLIC_KEY&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/root/domains-key.pub.pem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FILE_DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/root/.secrets/db_psswd.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DB_USER&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cat&lt;/span&gt;&lt;span&gt; ${FILE_DB_PASSWORD})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== VERIFICO L&amp;#39;ESISTENZA DELLA CARTELLA DI BACKUP =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ! -d&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$TARGET_FOLDER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;La cartella di destinazione non esiste, la creo: &lt;/span&gt;&lt;span&gt;$TARGET_FOLDER&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    mkdir&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /var/www_backups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== VERIFICO L&amp;#39;ESISTENZA DELLA CHIAVE PUBBLICA =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ! -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$PUBLIC_KEY&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;La chiave pubblica non esiste: &lt;/span&gt;&lt;span&gt;$PUBLIC_KEY&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== VERIFICO L&amp;#39;ESISTENZA DELLA PASSWORD DI ROOT =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ! -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$FILE_DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;Il file con la password di root non esiste: &lt;/span&gt;&lt;span&gt;$FILE_DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    exit 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== SCRIPT BACKUP DB =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;/span&gt;&lt;span&gt; dbname&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mysql&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -u&lt;/span&gt;&lt;span&gt; ${DB_USER}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p${&lt;/span&gt;&lt;span&gt;DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;} -e&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;show databases&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -s --skip-column-names&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;  if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;information_schema&amp;quot;&lt;/span&gt;&lt;span&gt; ] &amp;amp;&amp;amp; [&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;performance_schema&amp;quot;&lt;/span&gt;&lt;span&gt; ] &amp;amp;&amp;amp; [&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;mysql&amp;quot;&lt;/span&gt;&lt;span&gt; ] &amp;amp;&amp;amp; [&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sys&amp;quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ARCHIVE_DB&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;${&lt;/span&gt;&lt;span&gt;dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}-dump-${&lt;/span&gt;&lt;span&gt;DATE&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.backup.sql.gz.enc&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    mysqldump&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -u&lt;/span&gt;&lt;span&gt; ${DB_USER}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p${&lt;/span&gt;&lt;span&gt;DB_PASSWORD&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;} --single-transaction --routines --events --triggers --complete-insert&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$dbname&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; gzip&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -9 -c \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; openssl&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; smime&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -encrypt -binary -text -aes256 -out&lt;/span&gt;&lt;span&gt; ${TARGET_FOLDER}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/&lt;/span&gt;&lt;span&gt;${ARCHIVE_DB}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -outform&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; DER&lt;/span&gt;&lt;span&gt; ${PUBLIC_KEY}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ===== SCRIPT BACKUP FILES =====&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;/span&gt;&lt;span&gt; virtual_host&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /etc/apache2/sites-available/*.conf&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    virtual_host&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;basename&lt;/span&gt;&lt;span&gt; $virtual_host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; .conf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ! -d&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/var/www/&lt;/span&gt;&lt;span&gt;$virtual_host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;La cartella /var/www/&lt;/span&gt;&lt;span&gt;$virtual_host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; non esiste, passo al successivo&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        continue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ARCHIVE_FILES&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;${&lt;/span&gt;&lt;span&gt;virtual_host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}-files-${&lt;/span&gt;&lt;span&gt;DATE&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;}.backup.tar.gz.enc&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    tar&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -cvpzf&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /root/&lt;/span&gt;&lt;span&gt;${virtual_host}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.&lt;/span&gt;&lt;span&gt;${DATE}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.tar.gz&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /var/www/&lt;/span&gt;&lt;span&gt; $virtual_host&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    openssl&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; smime&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -encrypt -binary -text -aes256 -in&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /root/&lt;/span&gt;&lt;span&gt;${virtual_host}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.&lt;/span&gt;&lt;span&gt;${DATE}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.tar.gz&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -out&lt;/span&gt;&lt;span&gt; ${TARGET_FOLDER}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;/&lt;/span&gt;&lt;span&gt;${ARCHIVE_FILES}&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -outform&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; DER&lt;/span&gt;&lt;span&gt; ${PUBLIC_KEY}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    rm&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /root/&lt;/span&gt;&lt;span&gt;${virtual_host}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.&lt;/span&gt;&lt;span&gt;${DATE}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;spiegazione-del-codice&quot;&gt;Spiegazione del codice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Variabili: Le variabili definiscono la data e l&#39;ora attuali (&lt;code&gt;DATE&lt;/code&gt;), la cartella di destinazione del backup (&lt;code&gt;TARGET_FOLDER&lt;/code&gt;), il percorso della chiave pubblica (&lt;code&gt;PUBLIC_KEY&lt;/code&gt;) e il file che contiene la password del database MySQL (&lt;code&gt;FILE_DB_PASSWORD&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Verifica delle Cartelle e dei File: Prima di eseguire il backup, lo script verifica se la cartella di destinazione, la chiave pubblica e il file con la password del database esistono.
Se la cartella non esiste viene creata, ma se la chiave pubblica o il file con la password non sono presenti, lo script termina con un messaggio di errore.&lt;/li&gt;
&lt;li&gt;Backup dei Database: Per ogni database, viene eseguito un dump tramite mysqldump, compresso con gzip e crittografato utilizzando la chiave pubblica. I file di backup vengono salvati nella cartella di destinazione.&lt;/li&gt;
&lt;li&gt;Backup dei File dei Virtualhost: Per ogni virtualhost configurato in Apache, viene creato un archivio compresso (tar.gz) contenente i file del sito web, crittografato con la chiave pubblica e salvato nella cartella di destinazione.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ripristino-dei-backup&quot;&gt;Ripristino dei backup&lt;/h2&gt;
&lt;p&gt;Per ripristinare i backup, è necessario decrittografare i file utilizzando la chiave privata. Ecco come eseguire il processo di decrittazione ed estrazione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# DECRIPTAZIONE ED ESTRAZIONE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FILENAME&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;indicare_il_nome_del_file&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; # ad esempio domain.local-files-2023-03-06-16-03-45.backup.tar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;openssl&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; smime&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -decrypt -in&lt;/span&gt;&lt;span&gt; ${FILENAME}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.gz.enc&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -binary -inform&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; DER&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -inkey&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domains-key.priv.pem&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -out&lt;/span&gt;&lt;span&gt; ${FILENAME}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;gzip&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -d&lt;/span&gt;&lt;span&gt; ${FILENAME}&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;tar&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -xvf&lt;/span&gt;&lt;span&gt; ${FILENAME}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;considerazioni-finali&quot;&gt;Considerazioni finali&lt;/h2&gt;
&lt;p&gt;Utilizzando questo script, è possibile eseguire backup regolari e crittografati di tutti i file e database ospitati su una macchina. La crittografia garantisce che i dati siano protetti da accessi non autorizzati, mantenendo al sicuro informazioni sensibili anche in caso di compromissione dei file di backup.&lt;/p&gt;
&lt;p&gt;Questo script rappresenta una base solida per automatizzare il processo di backup su un hosting e può essere facilmente adattato a necessità specifiche, come l&#39;invio di backup a un server remoto o l&#39;aggiunta di notifiche in caso di errori.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Oh-My-ZSH su Synology NAS</title>
          <pubDate>Fri, 06 May 2022 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/oh-my-zsh/</link>
          <guid>https://enricomarogna.com/blog/oh-my-zsh/</guid>
          <description xml:base="https://enricomarogna.com/blog/oh-my-zsh/">&lt;p&gt;La &lt;em&gt;Z shell&lt;/em&gt;, anche nota come &lt;a rel=&quot;external&quot; href=&quot;https://zsh.sourceforge.io/&quot;&gt;&lt;em&gt;zsh&lt;/em&gt;&lt;/a&gt;, è probabilmente la miglior shell multipiattaforma disponibile e non ha di certo bisogno delle mie presentazioni. &lt;a rel=&quot;external&quot; href=&quot;https://ohmyz.sh/&quot;&gt;&lt;em&gt;Oh-my-zsh&lt;/em&gt;&lt;/a&gt; invece è il framework, essenziale e imprescindibile, da integrare a zsh per estenderne le sue funzionalità tra cui una marea di &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins&quot;&gt;plugins&lt;/a&gt; e &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ohmyzsh/ohmyzsh/wiki/Themes&quot;&gt;temi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Utilizzarli sul NAS Synology è abbastanza semplice.
Prima di tutto è necessario installare zsh in questo modo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qualora già non lo fossero, abilitare i pacchetti di &lt;a rel=&quot;external&quot; href=&quot;https://synocommunity.com/&quot;&gt;SynoCommunity&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Successivamente installare dal &lt;em&gt;Centro Pacchetti&lt;/em&gt; &lt;code&gt;git&lt;/code&gt;(se non è ancora installato) e &lt;code&gt;Z shell&lt;/code&gt; (NB: &lt;em&gt;non la versione &quot;with modules&quot;&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Facile facile.&lt;/p&gt;
&lt;p&gt;Per installare &lt;em&gt;oh-my-zsh&lt;/em&gt; sarà necessario procedere tramite ssh:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;$(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per tutta una serie di motivi di sicurezza non ho impostato &lt;em&gt;zsh&lt;/em&gt; come shell di default ma la vado a richiamare nel momento in cui mi collego, tramite &lt;em&gt;ssh&lt;/em&gt;, in questo modo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rilevo la posizione di &lt;em&gt;zsh&lt;/em&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;which&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;e ottengo qualcosa di simile a:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;/usr/local/bin/zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;aggiungo alla stringa per collegarmi a ssh  &lt;code&gt;-t &#39;/usr/local/bin/zsh -l&#39;&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; paperino@192.168.0.2&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p 22 -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;/usr/local/bin/zsh -l&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Non rimane che personalizzare il framework con temi e plugins, tra i quali consiglio &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;docker-compose&lt;/code&gt;, &lt;code&gt;aliases&lt;/code&gt; e &lt;code&gt;z&lt;/code&gt;.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>SYNOLOGY DS720+ - SSL Certificato Let’s Encrypt wildcard</title>
          <pubDate>Thu, 14 Oct 2021 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/synology-lets-encrypt/</link>
          <guid>https://enricomarogna.com/blog/synology-lets-encrypt/</guid>
          <description xml:base="https://enricomarogna.com/blog/synology-lets-encrypt/">&lt;p&gt;&lt;em&gt;Testato su DSM 6.2.4&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Collegarsi via SSH al server NAS come indicato in &lt;a href=&quot;/blog/synology-ssh/&quot;&gt;questo articolo dedicato&lt;/a&gt;, eottenere i ì permessi root&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -i&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Posizionarsi nella cartella radice&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A questo punto è neccesario scaricare lo script &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Neilpang/acme.sh&quot;&gt;acme.sh&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;wget&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Assegnare i permessi di esecuzione allo script&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; a+x acme.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Successivamente si emette il certificato, avendo cura di sostituire &lt;em&gt;enricomarogna.com&lt;/em&gt; con il proprio dominio&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;./acme.sh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --issue -d *&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si ottiene un output di questo tipo&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Registering&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; account&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Registered&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACCOUNT_THUMBPRINT&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;abjJHFIUTDGIBDYDDJBDJKkhHk&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Creating&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domain key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;The&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domain key is here: /root/.acme.sh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com.key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Single&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domain=&amp;#39;*.enricomarogna.com&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Getting&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; domain auth token for each domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Getting&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; webroot for domain=&amp;#39;*.enricomarogna.com&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;You&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; need to add the txt record manually.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; the following TXT record:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Domain:&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;_acme-challenge.enricomarogna.com&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;TXT&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; value: &amp;#39;ThIsISNoTtHeReAlKeY&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Please&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; be aware that you prepend _acme-challenge. before your domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;so&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; the resulting subdomain will be: _acme-challenge.enricomarogna.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Please&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add the TXT records to the domains, and re-run with&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --renew.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Please&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add &amp;#39;--debug&amp;#39; or &amp;#39;--log&amp;#39; to check more details.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I dati di interesse sono &lt;strong&gt;Domain&lt;/strong&gt; e &lt;strong&gt;TXT value&lt;/strong&gt; e devono essere utilizzati nella gestione del DNS, nel mio esempio su &lt;a class=&quot;wp-editor-md-post-content-link&quot; href=&quot;https://domains.google.com&quot;&gt;Google Domain&lt;/a&gt;:&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/google-domain.png&quot; alt=&quot;Google Domains Records&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Una volta che il record è stato registrato, avviare lo script acme.sh con il flag &lt;code&gt;--renew&lt;/code&gt;.
Nota: Generalmente l&#39;aggiornamento del DNS avviene in qualche minuto, ma il tempo potrebbe variare in base al provider. &lt;strong&gt;Lanciare lo stesso comando dopo 3 mesi per il rinnovo del certificato&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;./acme.sh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --renew -d *&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se tutto va bene, si ottiene un output come quello riportato di seguito:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Your&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cert is in /root/.acme.sh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com.cer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Your&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cert key is in /root/.acme.sh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com.key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;The&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; intermediate CA cert is in /root/.acme.sh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com/ca.cer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;And&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; the full chain certs is there: /root/.acme.sh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.enricomarogna.com/fullchain.cer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Adesso copia i file in una cartella accessibile sul NAS. Nel mio caso ho creato una cartella chiamata Certs con la sottocartella enricomarogna.com al suo interno.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/root/.acme.sh/*.enricomarogna.com/*.enricomarogna.com.cer&amp;quot; &amp;quot;/volume1/Certs/enricomarogna.com/enricomarogna.com.cer&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/root/.acme.sh/*.enricomarogna.com/*.enricomarogna.com.key&amp;quot; &amp;quot;/volume1/Certs/enricomarogna.com/enricomarogna.com.key&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/root/.acme.sh/*.enricomarogna.com/ca.cer&amp;quot; &amp;quot;/volume1/Certs/enricomarogna.com/ca.cer&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;/root/.acme.sh/*.enricomarogna.com/fullchain.cer&amp;quot; &amp;quot;/volume1/Certs/enricomarogna.com/fullchain.cer&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vedrai che i file saranno nella cartella dopo aver eseguito le azioni cp.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/folder-files.png&quot; alt=&quot;Folder Files&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Puoi chiudere la sessione SSH ora e per motivi di sicurezza, puoi anche disabilitare SSH.
Tutto ciò che devi fare ora è importare il certificato sul Synology se lo desideri o iniziare semplicemente a usarlo dove ne hai bisogno!&lt;/p&gt;
&lt;p&gt;Se usi il tuo Synology come reverse proxy e ssl ofloader come me, questo è molto utile!
Vai al Pannello di controllo, quindi Sicurezza e Certificato. Scegli Aggiungi.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/create-certificate-1.png&quot; alt=&quot;Create Certificate&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Poi importa il certificato&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/create-certificate-2.png&quot; alt=&quot;Create Certificate&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Inserisci i file richiesti.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/create-certificate-3.png&quot; alt=&quot;Create Certificate&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Ora sei a posto e hai un certificato Let’s Encrypt wildcard.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-lets-encrypt/create-certificate-4.png&quot; alt=&quot;Create Certificate&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;</description>
      </item>
      <item>
          <title>Connessione sicura via SSH al Synology NAS</title>
          <pubDate>Thu, 14 Oct 2021 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/synology-ssh/</link>
          <guid>https://enricomarogna.com/blog/synology-ssh/</guid>
          <description xml:base="https://enricomarogna.com/blog/synology-ssh/">&lt;p&gt;I NAS Synology consentono il collegamento via terminale tramite ssh e per farlo è necessario abilitare il servizio:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pannello di Controllo &amp;gt; Terminale e SNMP &amp;gt; Attiva Servizo SSH&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/synology-ssh/Synology-NAS-Pannello-di-controllo.png&quot; alt=&quot;Synology NAS - Pannello di controllo&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;&lt;strong&gt;La porta standard è la 22, se ne consiglia però la personalizzazione con una differente.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Utilizzo i seguenti dati:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;client: &lt;strong&gt;Macbook Pro&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;server: &lt;strong&gt;Synology NAS con DSM 6.2.4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;username: &lt;strong&gt;paperino&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;indirizzo ip del server: &lt;strong&gt;192.168.0.2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;porta ssh del server: &lt;strong&gt;22&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per connettersi tramite terminale dal client è necessario utilizzare la sintassi &lt;em&gt;ssh -p numero_della_porta username@indirizzo_ip&lt;/em&gt;, quindi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p 22&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; paperino@192.168.0.2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Viene richiesto a questo punto l&#39;inserimento della password per l&#39;utente &lt;em&gt;paperino&lt;/em&gt; e la connessione al server dovrebbe essere stabilita.&lt;/p&gt;
&lt;p&gt;È chiaro quindi che ogni volta si voglia connettersi mediante SSH al server remoto è necessario inserire la password ma questo, oltre ad essere molto scomodo soprattutto se viene utilizzata una password robusta, non è il massimo in termini di sicurezza.&lt;/p&gt;
&lt;p&gt;E allora?
E allora &lt;strong&gt;&lt;a href=&quot;/blog/ssh-guide-for-beginners/&quot;&gt;autenticazione a chiave pubblica&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;L&#39;utilizzo dell&#39;autenticazione a chiave pubblica SSH per connettersi a un sistema remoto è un&#39;alternativa solida e più sicura dell&#39;accesso mediante password o passphrase. L&#39;autenticazione a chiave pubblica SSH si basa su algoritmi crittografici asimmetrici che generano una coppia di chiavi, una &lt;strong&gt;privata&lt;/strong&gt; e l&#39;altra &lt;strong&gt;pubblica&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;chiave privata&lt;/strong&gt;, di solito denominata &lt;em&gt;id_rsa&lt;/em&gt;, è memorizzata sul client. Questa dovrebbe essere tenuta al sicuro, con le autorizzazioni debitamente impostate in modo che nessun altro utente sul computer possa leggere il file.&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;chiave pubblica&lt;/strong&gt;, solitamente denominata &lt;em&gt;id_rsa.pub&lt;/em&gt;, è invece posizionata sul server remoto a cui si intende accedere. Questa può essere condivisa liberamente con chiunque.&lt;/p&gt;
&lt;p&gt;Generarla è molto semplice:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-keygen&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; rsa&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -b 4096 -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dove &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.ssh.com/academy/ssh/keygen&quot;&gt;ssh-keygen&lt;/a&gt;&lt;/strong&gt; è il componente della suite Secure Shell dedicato alla generazione delle chiavi, &lt;strong&gt;-t rsa&lt;/strong&gt; è la tipologia di algoritmo di firma digitale scelto, &lt;strong&gt;-b 4096&lt;/strong&gt; i bits e  &lt;strong&gt;-f ~/.ssh/id_rsa_paperino&lt;/strong&gt; il file di input. Rimando a &lt;a rel=&quot;external&quot; href=&quot;https://www.ssh.com/academy/ssh/keygen#choosing-an-algorithm-and-key-size&quot;&gt;ssh.com&lt;/a&gt; per maggiori specifiche.&lt;/p&gt;
&lt;p&gt;Vengono generati due file all’interno del path &lt;em&gt;~/.ssh/&lt;/em&gt;, ovvero &lt;strong&gt;id_rsa_paperino&lt;/strong&gt; e &lt;strong&gt;id_rsa_paperino.pub&lt;/strong&gt;, dove il primo è la chiave privata da conservare all’interno del client e il secondo quella pubblica che, come detto, va inviata al server in questo modo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-copy-id&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino.pub paperino@192.168.0.2&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p 22&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dove &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.ssh.com/academy/ssh/copy-id&quot;&gt;ssh-copy-id&lt;/a&gt;&lt;/strong&gt; è il componente dedicato all&#39;installazione delle chiave sul server, &lt;strong&gt;-f&lt;/strong&gt; ne forza la copia anche se questa è già installata, &lt;strong&gt;-i ~/.ssh/id_rsa_paperino.pub&lt;/strong&gt; indica quale chiave copiare e &lt;strong&gt;paperino@192.168.0.2 -p 22&lt;/strong&gt; si connette al server su cui la si vuole copiare.&lt;/p&gt;
&lt;p&gt;Tecnicamente questi passaggi sarebbero già sufficenti, se non fosse che di default il server NAS Synology non è abilitato per la connessione SSH a chiave pubblica. Per abilitarlo ci si collega via SSH con l&#39;inserimento della password:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p 22&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; paperino@192.168.0.2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Io utlizzo l&#39;editor nano, ma è utilizzabile qualunque editor:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/ssh/sshd_config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;de commentare le righe &lt;em&gt;PubkeyAuthentication yes&lt;/em&gt; e &lt;em&gt;AuthorizedKeysFile .ssh/authorized_keys&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Passaggio fondamentale è quello dedicato all&#39;essegnazione dei giusti permessi.&lt;/p&gt;
&lt;p&gt;Sul server:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 755&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 755&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 644&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sul client:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R 755&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R 600&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Riavviare il servizio sul server:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;synoservicectl&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --restart&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; sshd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;oppure disabilitare e riabilitare il servizio SSH in &lt;em&gt;Pannello di controllo&lt;/em&gt; &amp;gt; &lt;em&gt;Terminale e SNMP&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Aggiungere la nuova chiave all&#39;ssh-agent:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; &amp;quot;$(ssh-agent -s)&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aggiungere la chiave alla keychain usando il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-add&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -K&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo dovrebbe essere sufficiente per potersi collegare via SSH senza inserire la password e in modo sicuro:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; paperino@192.168.0.2&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p 22 -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per rendere la procedura di connessione sensibilmente più snella consiglio la creazione di un alias (rimando a &lt;a rel=&quot;external&quot; href=&quot;https://duckduckgo.com/&quot;&gt;DuckDuckGo&lt;/a&gt; se non si conosce l&#39;argomento), qualcosa del tipo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;alias&lt;/span&gt;&lt;span&gt; sshsynonas&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;ssh paperino@192.168.0.2 -p 22 -i ~/.ssh/id_rsa_paperino&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per connettersi sarà sufficiente dare il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sshsynonas&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
      <item>
          <title>Homebrew: Il gestore di pacchetti per MacOS</title>
          <pubDate>Wed, 13 Oct 2021 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/homebrew-macos-package-manager/</link>
          <guid>https://enricomarogna.com/blog/homebrew-macos-package-manager/</guid>
          <description xml:base="https://enricomarogna.com/blog/homebrew-macos-package-manager/">&lt;p&gt;Homebrew è un gestore di pacchetti open-source, ampiamente utilizzato nell&#39;ecosistema macOS, che semplifica l&#39;installazione, l&#39;aggiornamento e la gestione di software non inclusi nel sistema operativo. Grazie alla sua flessibilità e alla vasta comunità di sviluppatori, Homebrew è diventato uno strumento indispensabile per personalizzare ed estendere le funzionalità di macOS.&lt;/p&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;Prerequisiti&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CPU 64-bit Intel&lt;/li&gt;
&lt;li&gt;macOS 10.12 o superiore&lt;/li&gt;
&lt;li&gt;Command Line Tools (CLT) per Xcode: &lt;code&gt;xcode-select --install&lt;/code&gt;, developer.apple.com/downloads o Xcode&lt;/li&gt;
&lt;li&gt;Una shell Bourne-compatibile come ad esempio &lt;em&gt;bash&lt;/em&gt; o &lt;em&gt;zsh&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;installazione&quot;&gt;Installazione&lt;/h2&gt;
&lt;p&gt;L&#39;installazione di Homebrew è rapida e intuitiva. È sufficiente eseguire il seguente comando nel terminale:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;/usr/bin/ruby&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -e&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;$(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; https://raw.githubusercontent.com/Homebrew/install/master/install)&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al termine dell&#39;installazione, è consigliabile aggiornare l&#39;indice dei pacchetti disponibili:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;utilizzo&quot;&gt;Utilizzo&lt;/h2&gt;
&lt;p&gt;Usare Homebrew per gestire i nostri software preferiti è molto semplice, anche se non si è degli abitué della riga di comando, in questo modo &lt;code&gt;brew &amp;lt;comando&amp;gt; &amp;lt;nome_del_pacchetto&amp;gt;&lt;/code&gt;. Vedremo qui i comandi più utilizzati ma per una lista completa ed esaustiva, come sempre, è bene fare riferimento alla &lt;a href=&quot;https://docs.brew.sh&quot;&gt;documentazione ufficiale&lt;/a&gt;. Facciamo alcuni esempi.
Supponiamo di voler installare &lt;em&gt;speedtest-cli&lt;/em&gt;, un tool a riga di comando per testare la velocità della connessione internet.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install speedtest-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Digitando questo comando Homebrew procedere per noi a scaricare e installare il software:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;==&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; Downloading https://github.com/sivel/speedtest-cli/archive/v2.1.1.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;==&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; Downloading from https://codeload.github.com/sivel/speedtest-cli/tar.gz/v2.1.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;######################################################################## 100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;🍺&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;  /usr/local/Cellar/speedtest-cli/2.1.1:&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; files, 83.2KB, built in&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; seconds&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ma se invece avessimo installato il software errato e lo volessimo disinstallare completamente dal sistema?
Anche in questo caso Homebrew si mostra molto semplice nell&#39;utilizzo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; uninstall speedtest-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Procederà autonomamente ad eliminare ogni traccia di quanto precedentemente installato:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Uninstalling&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /usr/local/Cellar/speedtest-cli/2.1.1...&lt;/span&gt;&lt;span&gt; (7&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; files, 83.2KB&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;cask&quot;&gt;Cask&lt;/h3&gt;
&lt;p&gt;Con Homebrew i possibile installare anche software proprietari ad interfaccia grafica, come ad esempio &lt;a href=&quot;https://www.spotify.com&quot;&gt;Spotify&lt;/a&gt;. Supponiamo però di non conoscere il nome del pachetto (non sempre il nome di quest&#39;ultimo è intuitivo, se volessi installare &lt;em&gt;Telegram&lt;/em&gt; il nome del pacchetto è &lt;em&gt;telegram-desktop-dev&lt;/em&gt;) possiamo utilizzare la funzione &lt;em&gt;search&lt;/em&gt; in questo modo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; search spotify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il risultato sarà una lista di pachetti (in questo caso spotify ha la spunta ✔ perchè ho già installato questo software sul mio Mac):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;==&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; Casks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;spotify&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ✔                         spotify ✔                         spotify-notifications&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;spotify-notifications&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;             spotify-now-playing               spotify-now-playing&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I software ad interfaccia grafica vengono gestiti tramite la funzione &lt;strong&gt;cask&lt;/strong&gt;, pertanto, in questo caso, procediamo in questo modo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask install spotify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;font&quot;&gt;Font&lt;/h3&gt;
&lt;p&gt;Tramite &lt;em&gt;cask&lt;/em&gt; è possibile gestire anche i font con libera licenza di distribuzione. Ciò è reso possibile da &lt;a class=&quot;wp-editor-md-post-content-link&quot; href=&quot;3&quot;&gt;homebrew-cask-fonts&lt;/a&gt; e si installa in questo modo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; tap homebrew/cask-fonts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;per la ricerca di un font si usa la sintassi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; search font-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;nome_del_pacchett&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; search font-&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; fira&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ma è anche possibile avere l&#39;elenco di tutti i font disponibili:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; search font-&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;l&#39;installazione avviene come un comune pacchetto cask:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask install font-fira-code&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;e chiaramente anche la disinstallazione&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask uninstall font-fira-code&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;mas&quot;&gt;Mas&lt;/h3&gt;
&lt;p&gt;Homebrew permette anche la gestione di software presenti all&#39;interno di &lt;strong&gt;Mac App Store&lt;/strong&gt; tramite il pacchetto &lt;code&gt;mas&lt;/code&gt;. Installiamolo:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install mas&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ad esempio, una delle mie applicazioni preferite del &lt;strong&gt;Mac App Store&lt;/strong&gt;, utile nella gestione delle finestre, è &lt;code&gt;Magnet&lt;/code&gt; e per installarla procedo in questo modo.&lt;/p&gt;
&lt;p&gt;La cerco:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; search magnet&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mi viene restituito in output un elenco di applicazioni e per ogni riga il numero dell&#39;app, il suo nome e la versione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[...]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;441258766&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;   Magnet&lt;/span&gt;&lt;span&gt;   (2.4.6) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Infine la installo per mezzo del numero app:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 441258766&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Semplice. Pulito. Sicuro.&lt;/p&gt;
&lt;h3 id=&quot;list&quot;&gt;List&lt;/h3&gt;
&lt;p&gt;Per ottenere una lista delle applicazioni installate da riga di comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per la lista delle applicazioni ad interfaccia grafica:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per la lista delle applicazioni del Mac App Store:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;È possibile concatenare i comandi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; list&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask list&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;upgrade&quot;&gt;Upgrade&lt;/h3&gt;
&lt;p&gt;Per aggiornare tutte le applicazioni a riga di comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per aggiornare tutte le applicazioni ad interfaccia grafica:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per aggiornare tutte le applicazioni del Mac App Store:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;È possibile concatenare i comandi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; upgrade&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask upgrade&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per aggiornare una singola applicazione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;nome_del_pacchett&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask upgrade&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;nome_del_pacchett&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mas&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; upgrade&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;nome_del_pacchett&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ad esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; cask upgrade spotify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;backup-e-ripristino&quot;&gt;Backup e ripristino&lt;/h4&gt;
&lt;p&gt;Una delle funzioni che più amo di Homebrew è la possibilità di fare un backup della lista di tutte le applicazioni installate in modo da poterle ripristinare in modo semplice e veloce in caso, ad esempio, di ripristino del sistema operativo, per nuove installazioni o in caso di sostituzione del Mac. Vediamo come procedere:&lt;/p&gt;
&lt;p&gt;Installo il pacchetto necessario:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; tap Homebrew/bundle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per generare un file di testo con l&#39;elenco delle applicazioni installate:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; bundle dump&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verrà generato il file &lt;strong&gt;Brewfile&lt;/strong&gt; nella root del Mac aditabile con qualunque file editor.
Non dobbiamo far altro che conservare questo file di testo.&lt;/p&gt;
&lt;p&gt;Il ripristino è ancora più semplice. Ci portiamo col terminale nella cartella dove abbiamo salvato il Brewfile, ad esempio, supponendo di averlo nella cartella Documenti:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; Documents&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E poi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; bundle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finito. Homebrew installerà per noi tutti le applicazioni del nostro elenco.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Connessioni SSH: Guida Completa per Principianti</title>
          <pubDate>Wed, 13 Oct 2021 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/ssh-guide-for-beginners/</link>
          <guid>https://enricomarogna.com/blog/ssh-guide-for-beginners/</guid>
          <description xml:base="https://enricomarogna.com/blog/ssh-guide-for-beginners/">&lt;p&gt;Le connessioni SSH (Secure Shell) sono uno strumento essenziale per amministratori di sistema, sviluppatori e chiunque abbia bisogno di gestire server remoti in modo sicuro. Con questa guida, esploreremo le basi delle connessioni SSH, la sintassi principale, le diverse modalità d&#39;uso e i tunnel SSH.&lt;/p&gt;
&lt;p&gt;Indice&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#che-cos-e-ssh&quot;&gt;Che cos&#39;è SSH?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#installazione-di-ssh&quot;&gt;Installazione di SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#come-funziona-una-connessione-ssh&quot;&gt;Come funziona una connessione SSH&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#sintassi-base-di-ssh&quot;&gt;Sintassi base di SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#esempio&quot;&gt;Esempio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#autenticazione-tramite-chiavi-ssh&quot;&gt;Autenticazione tramite chiavi SSH&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#generare-una-coppia-di-chiavi-ssh&quot;&gt;Generare una coppia di chiavi SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#copiare-la-chiave-pubblica-sul-server-remoto&quot;&gt;Copiare la chiave pubblica sul server remoto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#opzioni-avanzate-di-ssh&quot;&gt;Opzioni avanzate di SSH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#tunnel-ssh&quot;&gt;Tunnel SSH&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#inoltro-locale-local-port-forwarding&quot;&gt;Inoltro locale (Local Port Forwarding)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#inoltro-remoto-remote-port-forwarding&quot;&gt;Inoltro remoto (Remote Port Forwarding)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#inoltro-dinamico-dynamic-port-forwarding&quot;&gt;Inoltro dinamico (Dynamic Port Forwarding)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#permessi-delle-cartelle-e-dei-file&quot;&gt;Permessi delle cartelle e dei file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#aggiungere-la-nuova-chiave-all-ssh-agent-del-client&quot;&gt;Aggiungere la nuova chiave all’ssh-agent del client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#configurazione-di-ssh&quot;&gt;Configurazione di SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://enricomarogna.com/blog/ssh-guide-for-beginners/#conclusione&quot;&gt;Conclusione&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;che-cos-e-ssh&quot;&gt;Che cos&#39;è SSH?&lt;/h2&gt;
&lt;p&gt;SSH è un protocollo di rete crittografico che consente di accedere e gestire dispositivi remoti tramite una connessione sicura. È ampiamente utilizzato per accedere a server Linux e Unix da remoto, ma è disponibile anche su altri sistemi operativi. La caratteristica principale di SSH è la sua sicurezza: grazie alla crittografia, i dati scambiati tra client e server non possono essere intercettati.&lt;/p&gt;
&lt;h2 id=&quot;installazione-di-ssh&quot;&gt;Installazione di SSH&lt;/h2&gt;
&lt;p&gt;Su molte distribuzioni Linux, SSH è preinstallato. Puoi verificare se SSH è installato con il seguente comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -V&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se non è installato, puoi installarlo con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Debian:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; apt install openssh-client&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;CentOS/Fedora:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; yum install openssh-clients&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;macOS:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install openssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;come-funziona-una-connessione-ssh&quot;&gt;Come funziona una connessione SSH&lt;/h2&gt;
&lt;p&gt;Una connessione SSH avviene tra due parti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client SSH: Il dispositivo locale che si connette al server remoto.&lt;/li&gt;
&lt;li&gt;Server SSH: Il dispositivo remoto che accetta la connessione.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per avviare una connessione SSH, si utilizza il comando ssh, seguito da alcune informazioni necessarie, come il nome utente e l&#39;indirizzo del server.&lt;/p&gt;
&lt;h3 id=&quot;sintassi-base-di-ssh&quot;&gt;Sintassi base di SSH&lt;/h3&gt;
&lt;p&gt;La sintassi di base del comando SSH è:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span&gt; [opzioni] utente@host&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;utente: Il nome dell&#39;utente con cui vuoi accedere al server remoto.&lt;/li&gt;
&lt;li&gt;host: L&#39;indirizzo IP o il dominio del server remoto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;esempio&quot;&gt;Esempio&lt;/h3&gt;
&lt;p&gt;Supponiamo di voler accedere a un server con l&#39;utente &lt;code&gt;root&lt;/code&gt; e l&#39;indirizzo IP &lt;code&gt;192.168.1.100&lt;/code&gt;. Il comando sarà:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Una volta inviato il comando, il client SSH ti chiederà la password del server remoto (a meno che non utilizzi l&#39;autenticazione basata su chiavi, che vedremo più avanti).&lt;/p&gt;
&lt;h2 id=&quot;autenticazione-tramite-chiavi-ssh&quot;&gt;Autenticazione tramite chiavi SSH&lt;/h2&gt;
&lt;p&gt;Un modo più sicuro per autenticarsi con SSH è tramite chiavi pubbliche e private, eliminando la necessità di inserire la password. Il processo prevede la generazione di una coppia di chiavi crittografiche: una chiave privata (che resta sul tuo dispositivo) e una chiave pubblica (che viene trasferita al server remoto).&lt;/p&gt;
&lt;h3 id=&quot;generare-una-coppia-di-chiavi-ssh&quot;&gt;Generare una coppia di chiavi SSH&lt;/h3&gt;
&lt;p&gt;Per generare una coppia di chiavi SSH, utilizza il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-keygen&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Segui le istruzioni e salva le chiavi nel percorso predefinito (&lt;code&gt;~/.ssh/id_rsa&lt;/code&gt;). Questo creerà due file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id_rsa&lt;/code&gt;: La chiave privata.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;id_rsa.pub&lt;/code&gt;: La chiave pubblica.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nella generazione, oltre a poter specificare un nome diverso, è possibile utilizzare ulteriori parametri.&lt;/p&gt;
&lt;p&gt;Ad esempio&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-keygen&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; rsa&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -b 4096 -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando genera una coppia di chiavi RSA con una lunghezza di 4096 bit e le salva in &lt;code&gt;~/.ssh/id_rsa_paperino&lt;/code&gt;.
Dove &lt;a rel=&quot;external&quot; title=&quot;ssh-keygen&quot; href=&quot;https://www.ssh.com/academy/ssh/keygen&quot;&gt;ssh-keygen&lt;/a&gt; è il componente della suite &lt;strong&gt;Secure Shell&lt;/strong&gt; dedicato alla generazione delle chiavi, &lt;code&gt;-t rsa&lt;/code&gt; è la tipologia di algoritmo di firma digitale scelto, &lt;code&gt;-b 4096&lt;/code&gt; i bits e &lt;code&gt;-f ~/.ssh/id_rsa_paperino&lt;/code&gt; il file di input.&lt;/p&gt;
&lt;p&gt;Oppure con curve ellittiche, che risultano essere al momento lo standard di sicurezza più elevato:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-keygen&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ecdsa&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -b 521 -f&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_ecdsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rimando a &lt;a rel=&quot;external&quot; title=&quot;ssh.com&quot; href=&quot;https://www.ssh.com/academy/ssh/keygen#choosing-an-algorithm-and-key-size&quot;&gt;ssh.com&lt;/a&gt; per maggiori specifiche.&lt;/p&gt;
&lt;h3 id=&quot;copiare-la-chiave-pubblica-sul-server-remoto&quot;&gt;Copiare la chiave pubblica sul server remoto&lt;/h3&gt;
&lt;p&gt;Una volta generata la chiave, puoi copiarla sul server remoto utilizzando il comando:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-copy-id&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; utente@host&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ad esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-copy-id&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando trasferisce la chiave pubblica al server remoto e permette di accedere senza dover inserire la password ogni volta.&lt;/p&gt;
&lt;p&gt;È chiaramente possibile specificare una chiave diverso da &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-copy-id&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino.pub root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;opzioni-avanzate-di-ssh&quot;&gt;Opzioni avanzate di SSH&lt;/h3&gt;
&lt;p&gt;SSH supporta numerose opzioni che possono migliorare la tua esperienza di utilizzo e aggiungere funzionalità. Eccone alcune delle più utili:&lt;/p&gt;
&lt;h3 id=&quot;specificare-una-porta-diversa&quot;&gt;Specificare una porta diversa&lt;/h3&gt;
&lt;p&gt;Di default, SSH utilizza la porta 22. Se il server remoto utilizza una porta diversa, puoi specificarla con l&#39;opzione -p:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;/span&gt;&lt;span&gt; [porta] utente@host&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;eseguire-comandi-remoti&quot;&gt;Eseguire comandi remoti&lt;/h3&gt;
&lt;p&gt;Puoi eseguire comandi su un server remoto senza avviare una sessione SSH interattiva. Basta specificare il comando alla fine della stringa SSH:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; utente@host &amp;quot;comando&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ad esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root@192.168.1.100 &amp;quot;ls /var/www&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando mostrerà il contenuto della directory &lt;code&gt;/var/www&lt;/code&gt; del server remoto.&lt;/p&gt;
&lt;h2 id=&quot;tunnel-ssh&quot;&gt;Tunnel SSH&lt;/h2&gt;
&lt;p&gt;Una delle funzionalità avanzate di SSH è la possibilità di creare tunnel sicuri, che possono essere utilizzati per inoltrare il traffico da un dispositivo locale a uno remoto in modo sicuro. I tunnel SSH sono utili per proteggere connessioni altrimenti non sicure, come quando si accede a una rete interna o si bypassano restrizioni di rete.&lt;/p&gt;
&lt;h3 id=&quot;inoltro-locale-local-port-forwarding&quot;&gt;Inoltro locale (Local Port Forwarding)&lt;/h3&gt;
&lt;p&gt;L&#39;inoltro locale consente di reindirizzare il traffico da una porta del tuo dispositivo locale a una porta su un dispositivo remoto attraverso un server SSH.&lt;/p&gt;
&lt;p&gt;Sintassi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -L&lt;/span&gt;&lt;span&gt; [porta_locale]:[host_remoto]:[porta_remota] utente@host_ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -L&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 8080:localhost:80 root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando reindirizzerà tutto il traffico inviato alla porta locale 8080 verso la porta 80 (HTTP) del server remoto attraverso il server SSH.&lt;/p&gt;
&lt;h3 id=&quot;inoltro-remoto-remote-port-forwarding&quot;&gt;Inoltro remoto (Remote Port Forwarding)&lt;/h3&gt;
&lt;p&gt;L&#39;inoltro remoto consente di esporre una porta del tuo dispositivo locale attraverso un server remoto, consentendo ad altri di connettersi a quella porta.&lt;/p&gt;
&lt;p&gt;Sintassi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R&lt;/span&gt;&lt;span&gt; [porta_remota]:[host_locale]:[porta_locale] utente@host_ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 9090:localhost:3000 root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In questo caso, chiunque si colleghi al server remoto sulla porta 9090 sarà reindirizzato alla porta 3000 del tuo dispositivo locale.&lt;/p&gt;
&lt;h3 id=&quot;inoltro-dinamico-dynamic-port-forwarding&quot;&gt;Inoltro dinamico (Dynamic Port Forwarding)&lt;/h3&gt;
&lt;p&gt;L&#39;inoltro dinamico trasforma il tuo dispositivo locale in un proxy SOCKS5. Questo può essere utile per instradare tutto il traffico di rete attraverso il server SSH.&lt;/p&gt;
&lt;p&gt;Sintassi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -D&lt;/span&gt;&lt;span&gt; [porta] utente@host&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esempio:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -D 1080&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root@192.168.1.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dopo aver eseguito questo comando, puoi configurare le applicazioni per utilizzare localhost:1080 come proxy SOCKS5.&lt;/p&gt;
&lt;h2 id=&quot;permessi-delle-cartelle-e-dei-file&quot;&gt;Permessi delle cartelle e dei file&lt;/h2&gt;
&lt;p&gt;Per garantire la sicurezza delle chiavi SSH, è importante impostare i permessi corretti sulle cartelle e sui file. Le chiavi private dovrebbero avere i permessi 600 (rw-------), le chiavi pubbliche 644 (rw-r--r--) e le cartelle &lt;code&gt;.ssh&lt;/code&gt; dovrebbero avere i permessi 700 (rwx------).&lt;/p&gt;
&lt;p&gt;Puoi impostare i permessi corretti con i seguenti comandi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 700&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R 600&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -R 644&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;aggiungere-la-nuova-chiave-all-ssh-agent-del-client&quot;&gt;Aggiungere la nuova chiave all’ssh-agent del client&lt;/h2&gt;
&lt;p&gt;Per evitare di dover inserire la password della chiave privata ogni volta che si accede al server remoto, è possibile aggiungere la chiave all&#39;&lt;code&gt;ssh-agent&lt;/code&gt; del client.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;$(&lt;/span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-agent&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;)&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh-add&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -K&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;configurazione-di-ssh&quot;&gt;Configurazione di SSH&lt;/h2&gt;
&lt;p&gt;Puoi personalizzare il comportamento di SSH modificando il file di configurazione &lt;code&gt;~/.ssh/config&lt;/code&gt;. Questo file ti permette di definire alias per i server, specificare opzioni predefinite e configurare tunnel SSH.&lt;/p&gt;
&lt;p&gt;Ecco un esempio di file di configurazione:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; server1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    HostName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    User&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    Port&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    IdentityFile&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Host&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; server2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    HostName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    User&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    Port&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2222&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    IdentityFile&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~/.ssh/id_rsa_paperino&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;Host&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    ServerAliveInterval&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 60&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;    Compression&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In questo esempio, abbiamo definito due alias per i server &lt;code&gt;server1&lt;/code&gt; e &lt;code&gt;server2&lt;/code&gt;, specificando l&#39;indirizzo IP, l&#39;utente, la porta e il file di chiave per ciascuno. Inoltre, abbiamo configurato alcune opzioni globali per tutti i server, come l&#39;intervallo di keepalive e la compressione.&lt;/p&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;SSH è uno strumento potente e flessibile, essenziale per chiunque lavori con server remoti. Oltre alle connessioni di base, offre molte opzioni avanzate come l&#39;autenticazione con chiavi, l&#39;esecuzione di comandi remoti e la creazione di tunnel sicuri. Una volta padroneggiate queste funzionalità, sarai in grado di gestire server e applicazioni in modo sicuro ed efficiente.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Retropie su Raspberry Pi 3 - Guida completa</title>
          <pubDate>Fri, 13 May 2016 00:00:00 +0000</pubDate>
          <author>Enrico Marogna</author>
          <link>https://enricomarogna.com/blog/retropie-raspberry-pi3/</link>
          <guid>https://enricomarogna.com/blog/retropie-raspberry-pi3/</guid>
          <description xml:base="https://enricomarogna.com/blog/retropie-raspberry-pi3/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://retropie.org.uk/&quot;&gt;RetroPie&lt;/a&gt; è un sistema operativo che consente di emulare alcune delle console più datate direttamente sul Raspberry Pi. Nintendo, Sega, Playstation, Atari, Game Boy e tanti altri. Qui una &lt;a rel=&quot;external&quot; href=&quot;https://retropie.org.uk/docs/&quot;&gt;lista completa&lt;/a&gt; delle console supportate. Tutto quello di cui si ha bisogno per iniziare:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi (A, A+, B, B+, Zero, 2, 3)&lt;/li&gt;
&lt;li&gt;Un alimentatore da 5V 2.5A&lt;/li&gt;
&lt;li&gt;Scheda SD da minimo 8GB su cui installare RetroPie&lt;/li&gt;
&lt;li&gt;Cavo HDMI&lt;/li&gt;
&lt;li&gt;Gamepad e/o tastiera&lt;/li&gt;
&lt;li&gt;Cavo Ethernet o Wifi dongle (nel Raspberry Pi 3 e’ gia’ integrato)&lt;/li&gt;
&lt;li&gt;Case per Raspberry Pi (opzionale ma e’ raccomandato)&lt;/li&gt;
&lt;li&gt;Lettore di schede Micro SD&lt;/li&gt;
&lt;li&gt;Memoria esterna per caricare le ROM dei giochi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Io ho acquistato direttamente il kit da &lt;a rel=&quot;external&quot; href=&quot;https://www.amazon.it/Raspberry-Official-Desktop-Starter-Bundle/dp/B01CSD1X3E/ref=as_li_ss_tl?psc=1&amp;amp;SubscriptionId=AKIAJ6IF6X4RRZ2B4KSQ&amp;amp;linkCode=ll1&amp;amp;tag=enricomarog0c-21&amp;amp;linkId=14ef704af03cae44f1692d29c0a5a567&quot;&gt;Amazon&lt;/a&gt; a poco piu’ di 70€, che
comprende:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 3&lt;/li&gt;
&lt;li&gt;Alimentatore da 5V 2.5A originale&lt;/li&gt;
&lt;li&gt;Micro SD “Sandisk” da 16 GB con adattatore SD&lt;/li&gt;
&lt;li&gt;Cavo HDMI&lt;/li&gt;
&lt;li&gt;Cavo di rete Ethernet&lt;/li&gt;
&lt;li&gt;Case originale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per la tastiera ho invece optato per una WiFi (comodissima anche come telecomando della smart TV), sempre su &lt;a rel=&quot;external&quot; href=&quot;https://amzn.to/3yRlc5P&quot;&gt;Amazon&lt;/a&gt;, a poco meno di 20 euro. Ma è possibile trovare &lt;a rel=&quot;external&quot; href=&quot;http://amzn.to/2w5RfZG&quot;&gt;validissime alternative&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/kit.jpg&quot; alt=&quot;RetroPie Kit &amp; Keyboard&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Non ci rimane a questo punto che scaricare Retropie e copiarlo sulla scheda SD.&lt;/p&gt;
&lt;h3 id=&quot;installazione&quot;&gt;Installazione&lt;/h3&gt;
&lt;p&gt;Utilizzo per questa operazione un Mac quindi procedo tramite &lt;a href=&quot;http://www.tweaking4all.com/software/macosx-software/macosx-apple-pi-baker/&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;ApplePi Baker&lt;/a&gt;, intuitivo e facile da utilizzare. Per Windows potete utilizzare invece &lt;a href=&quot;http://sourceforge.net/projects/win32diskimager/&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Win32DiskImager&lt;/a&gt; mentre per Linux &lt;a href=&quot;https://unetbootin.github.io/&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Unetbootin&lt;/a&gt;. Selezioniamo la scheda da utilizzare (troviamo l’elenco delle unità in &lt;em&gt;Pi-Crust&lt;/em&gt;) per prepararla alla scrittura e clicchiamo su &lt;em&gt;Prep for NOOBS&lt;/em&gt;. Infine, su &lt;em&gt;Pi-Ingredients&lt;/em&gt;, cerchiamo in &lt;em&gt;IMG file&lt;/em&gt; l’immagine di RetroPie precedentemente scaricata e clicchiamo su &lt;em&gt;Restore Backup&lt;/em&gt;. Terminato il caricamento di circa 5 minuti, visibile su &lt;em&gt;Progress&lt;/em&gt;, la nostra console sarà pronta per il primo avvio.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/applepi-baker.jpg&quot; alt=&quot;ApplePi-Baker&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;h3 id=&quot;primo-avvio-e-configurazione-base&quot;&gt;Primo avvio e configurazione base&lt;/h3&gt;
&lt;p&gt;Colleghiamo il Raspberry Pi allo schermo tramite cavo HDMI e, dopo aver inserito la micro sd su cui abbiamo installato RetroPie, alimentiamolo (il Raspberry Pi é privo di un tasto di accensione/spegnimento, si gestisce tramite alimentazione).&lt;/p&gt;
&lt;p&gt;La prima schermata ci chiede di configurare il nostro gamepad tenendo premuto un tasto qualsiasi.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-welcome.png&quot; alt=&quot;RetroPie Welcome Page&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Io utilizzo un un vecchio gamepad usb ma, se avete qualche euro in più, vi portate a casa questa &lt;a href=&quot;https://amzn.to/30CbGjn&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;meraviglia&lt;/a&gt;:&lt;/p&gt;
&lt;a class=&quot;&quot; href=&quot;https://amzn.to/30CbGjn&quot;&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/bufalo-gamepad.jpg&quot; alt=&quot;Buffalo Gamepad&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;/a&gt;
&lt;p&gt;Come dicevo, tenendo premuto un tasto del controller usb, abbiamo la possibilità di configurare tutti i relativi tasti e la nostra console è pronta per portarci indietro con il divertimento.&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-conf-page.jpg&quot; alt=&quot;RetroPie Configuring Page&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-detected-page.png&quot; alt=&quot;RetroPie Gamepad Detected Page&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-console-carousel-page.jpg&quot; alt=&quot;RetroPie Console Carousel Page&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;h3 id=&quot;dove-caricare-le-rom-dei-giochi&quot;&gt;Dove caricare le rom dei giochi&lt;/h3&gt;
&lt;p&gt;Per caricare le ROM dei giochi, utilizziamo una memoria esterna, va benissimo una chiavetta (la capienza dipende da quanti giochi volete metterci dentro) e creiamo nella root una cartelle denominata &lt;em&gt;retropie&lt;/em&gt;, inseriamola nel Raspberry Pi e attendiamo che il led smetta di lampeggiare. RetroPie creerà, all’interno della cartella &lt;em&gt;retropie&lt;/em&gt; della memoria esterna, delle ulteriori sotto-cartelle con i nomi delle varie console al cui interno andremmo ad inserire le ROM dei giochi.&lt;/p&gt;
&lt;h3 id=&quot;alcune-immagini&quot;&gt;Alcune immagini&lt;/h3&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-metal-slug.jpg&quot; alt=&quot;RetroPie Metal Slug&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-tekken.jpg&quot; alt=&quot;RetroPie Tekken&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-super-mario.jpg&quot; alt=&quot;RetroPie Super Mario&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-moonwalker.jpg&quot; alt=&quot;RetroPie Moonwalker&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/retropie-the-king-of-fighters.jpg&quot; alt=&quot;RetroPie The King Of Fighters&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;h3 id=&quot;ssh&quot;&gt;SSH&lt;/h3&gt;
&lt;p&gt;E’ possibile collegarsi al Raspberry Pi tramite ssh utilizzando, come utenze predefinite, username &lt;em&gt;pi&lt;/em&gt; e password &lt;em&gt;raspberry&lt;/em&gt;. In questa guida, troverete i comandi più comuni che possono esservi utili nella gestione dei file. &lt;a href=&quot;http://www.newcomweb.it/blog/how-to-apache-e-dintorni/article/come-trasferire-file-e-cartelle&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Qui&lt;/a&gt;, invece, un utile how to di per il trasferimento dei file via ssh.&lt;/p&gt;
&lt;h3 id=&quot;accensione-e-spegnimento&quot;&gt;Accensione e spegnimento&lt;/h3&gt;
&lt;p&gt;Il RPi, come noto, non ha un pulsante di accensione e spegnimento. Sul portale italiano &lt;a href=&quot;https://Raspberryitaly.com&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Raspberryitaly&lt;/a&gt; è possibile trovare una esaustiva guida per poterne creare uno, riporto sotto l&#39;how to. Se invece non volete perdere tempo, è possibile &lt;a href=&quot;https://www.amazon.it/dp/B01M58O9M9/ref=as_li_ss_tl?_encoding=UTF8&amp;colid=L6042OUXNVN8&amp;coliid=IPAK8T3A9RJLP&amp;linkCode=ll1&amp;tag=enricomarog0c-21&amp;linkId=11683438d4a7a4abd947eeb04e7d6f5c&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;acquistare un alimentatore con pulsante di accensione/spegnimento integrato&lt;/a&gt;. A voi la scelta.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4 id=&quot;parte-0-premessa&quot;&gt;PARTE 0: PREMESSA&lt;/h4&gt;
&lt;p&gt;Come sappiamo, il RPi non ha un pulsante di accensione ne spegnimento di fabbrica: una volta alimentato si accende immediatamente e per spegnerlo si può usare il comando &lt;strong&gt;# poweroff&lt;/strong&gt;; inoltre dopo essere stato spento, per riaccendere il RPi è necessario &lt;strong&gt;scollegarlo&lt;/strong&gt; e ricollegarlo all’alimentazione (e tanti saluti al connettore!)&lt;/p&gt;
&lt;p&gt;Il &lt;strong&gt;consumo&lt;/strong&gt; del RPi è &lt;strong&gt;irrisorio&lt;/strong&gt;, quindi (sotto questo punto di vista) forse non conviene neanche spegnerlo e riaccenderlo, ma potrebbe essere utile per varie ragioni: per esempio, una persona che vive in una zona soggetta a frequenti blackout, salva il RPi da &lt;strong&gt;arresti anomali&lt;/strong&gt;, preservando così il file system. Altra argomentazione potrebbe essere il fatto che la scheda SD, essendo una memoria &lt;strong&gt;flash&lt;/strong&gt;, è soggetta ad usura e più tempo il Raspberry sta acceso, più la &lt;strong&gt;SD si consuma&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ma a inizio articolo abbiamo detto che esiste già un comando per spegnerlo: a cosa dovrebbe servire un &lt;strong&gt;pulsante&lt;/strong&gt;? Può risultare comodo per media center o anche per RPi usati da &lt;strong&gt;remoto&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;parte-1-il-pulsante-di-accensione&quot;&gt;PARTE 1: IL PULSANTE DI ACCENSIONE&lt;/h4&gt;
&lt;p&gt;Per quanto riguarda il &lt;strong&gt;pulsante di accensione&lt;/strong&gt; bisogna premettere anche che sono necessarie competenze elettroniche: è necessario &lt;strong&gt;saldare&lt;/strong&gt; due cavetti &lt;strong&gt;sul nostro RPi&lt;/strong&gt; (ammetto che anch’io quando l’ho fatto avevo un pò, come dire, di paura!)&lt;/p&gt;
&lt;p&gt;Leggete questo articolo per sapere cosa saldare. Una volta saldato i due cavetti al connettore, non ci resta che saldarli alle due estremità di un &lt;strong&gt;pulsante NO&lt;/strong&gt; (NA in italiano), ossia un pulsante che, quando premuto, crea un contatto fra i due morsetti.&lt;/p&gt;
&lt;p&gt;Ecco fatto, abbiamo &lt;strong&gt;realizzato il nostro pulsante di accensione&lt;/strong&gt;! Una volta spento il RPi possiamo usarlo per riaccenderlo: molto più comodo che scollegarlo e ricollegarlo!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;N.B.&lt;/strong&gt;: se premete il tasto mentre RPi è acceso, questo si riavvierà e ciò equivale a un &lt;strong&gt;arresto anomalo&lt;/strong&gt;, quindi è da evitare!&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&quot;parte-2-il-pulsante-di-spegnimento&quot;&gt;PARTE 2: IL PULSANTE DI SPEGNIMENTO&lt;/h4&gt;
&lt;p&gt;Per quanto riguarda il pulsante di &lt;strong&gt;spegnimento&lt;/strong&gt;: la parte &lt;strong&gt;hardware&lt;/strong&gt; è più &lt;strong&gt;semplice&lt;/strong&gt; ma è necessaria una parte &lt;strong&gt;software&lt;/strong&gt;. che intercetta la pressione del pulsante ed impartisce il comando poweroff.&lt;/p&gt;
&lt;p&gt;E’ infatti sufficiente collegare le due estremità di un pulsante NO una au una &lt;strong&gt;GPIO&lt;/strong&gt; e una ad un &lt;strong&gt;GND&lt;/strong&gt; (vi consiglio &lt;strong&gt;GPIO 10&lt;/strong&gt; così il codice d’esempio funziona senza problemi!).&lt;/p&gt;
&lt;p&gt;Per il software invece create il file /root/shutdown_button&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /root/shutdown_button&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E inserite il seguente codice:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#-*- coding: utf-8 -*-&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;/span&gt;&lt;span&gt; RPi.&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; GPIO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.setmode(&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;BCM&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.setwarnings(&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;#Nelle due righe seguenti, eventualmente sostituire 10 col numero del GPIO a cui avete collegato il pulsante (numerazione GPIO.BCM)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.setup(&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;10&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;IN&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;pull_up_down&lt;/span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;PUD_UP&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.wait_for_edge(&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;10&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;GPIO&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;FALLING&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;os.system(“poweroff”)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Diamo i giusti &lt;strong&gt;permessi&lt;/strong&gt; al file coi seguenti comandi:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chown root:root /root/shutdown_button&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 770&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; /root/shutdown_button&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ora modificate il file &lt;strong&gt;/etc/rc.local&lt;/strong&gt; per farlo eseguire in &lt;strong&gt;automatico&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; nano /etc/rc.local&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;e aggiungete &lt;strong&gt;prima dell’ultima&lt;/strong&gt; riga la seguente:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;/root/shutdown_button&lt;/span&gt;&lt;span&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt; #mi raccomando la &amp;amp; finale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in modo che il file sia uguale al &lt;strong&gt;seguente&lt;/strong&gt; (ovviamente se lo avete modificato prima per altri motivi ci avrete anche altre righe)&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/terminal.png&quot; alt=&quot;Terminal&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;p&gt;Premete &lt;strong&gt;CTRL+X&lt;/strong&gt;, digitate &lt;strong&gt;Y&lt;/strong&gt; ed &lt;strong&gt;invio&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ora non ci resta che &lt;strong&gt;riavviare&lt;/strong&gt; il RPi&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ora, se premete il tasto di spegnimento, il Raspberry si spegne &lt;strong&gt;correttamente&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Per concludere vi mostro come ho aggiunto i tasti di accensione e spegnimento al
RPi che uso come media center (troverò un modo per indicare qual è ON e qual è
OFF, magari delle etichette con stampate le icone di font awesome).&lt;/p&gt;
&lt;img src=&quot;https://enricomarogna.com/img/blog/retropie-raspberry/hardware.jpg&quot; alt=&quot;Hardware&quot; class=&quot;center&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot;/&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;conclusioni&quot;&gt;Conclusioni&lt;/h3&gt;
&lt;p&gt;Questa guida é stata creata più come promemoria per mie future installazioni, in modo da avere tutto assieme ciò che ho trovato un po&#39; sparso per il web, che per una guida definitiva da propinarvi. Non mi assumo quindi responsabilità in caso di malfunzionamenti. Se avete da chiedere delucidazioni o volete fare degli appunti/correzioni, lasciate pure un commento e sarò felice di rispondervi o apportare modifiche al testo.
Buon divertimento.&lt;/p&gt;
&lt;p&gt;Fonti:
&lt;a href=&quot;https://github.com&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Github.com&lt;/a&gt; ||
&lt;a href=&quot;https://retropie.org.uk&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Retropie.org.uk&lt;/a&gt; ||
&lt;a href=&quot;https://raspberryitaly.com&quot; target=&quot;_blank&quot; rel=&quot;external noopener noreferrer&quot;&gt;Raspberryitaly.com&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
    </channel>
</rss>
