<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>RaffaeleChiatto.com</title>
	<atom:link href="https://www.raffaelechiatto.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.raffaelechiatto.com</link>
	<description>Il Blog di Informatica a 360°</description>
	<lastBuildDate>Thu, 17 Sep 2026 07:35:08 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.raffaelechiatto.com/wp-content/uploads/2025/05/favicon-150x150.png</url>
	<title>RaffaeleChiatto.com</title>
	<link>https://www.raffaelechiatto.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<itunes:explicit>no</itunes:explicit><itunes:subtitle>Il Blog di Informatica a 360°</itunes:subtitle><itunes:category text="Technology"><itunes:category text="Gadgets"/></itunes:category><item>
		<title>Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-adguard-home-su-ubuntu-server-26-04-con-docker-compose/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-adguard-home-su-ubuntu-server-26-04-con-docker-compose/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 17 Sep 2026 07:35:08 +0000</pubDate>
				<category><![CDATA[AdGuard]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Docker Compose]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124668</guid>

					<description><![CDATA[&#160; AdGuard Home è un DNS sinkhole self-hosted che blocca pubblicità, tracker e domini malevoli a livello di rete, prima ancora che raggiungano i tuoi dispositivi. A differenza di un semplice ad-blocker installato nel browser, funziona come server DNS per l&#8217;intera rete domestica o aziendale: ogni dispositivo che lo interroga (computer, smartphone, smart TV, console, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="679" height="89" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 9" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>AdGuard Home è un DNS sinkhole self-hosted che blocca pubblicità, tracker e domini malevoli a livello di rete, prima ancora che raggiungano i tuoi dispositivi.</p>
<p>A differenza di un semplice ad-blocker installato nel browser, funziona come server DNS per l&#8217;intera rete domestica o aziendale: ogni dispositivo che lo interroga (computer, smartphone, smart TV, console, IoT) beneficia automaticamente della protezione, senza bisogno di installare estensioni o app su ciascun device.</p>
<p>Questa guida spiega come installare e configurare AdGuard Home su Ubuntu Server 26.04 utilizzando Docker Compose, un approccio che semplifica notevolmente la gestione del servizio: l&#8217;applicazione gira in un container isolato, con configurazione e dati persistiti su volumi dedicati, aggiornamenti puliti tramite semplice pull dell&#8217;immagine e rollback rapido in caso di problemi, senza dover intervenire manualmente sul sistema operativo host.</p>
<p>Nella pratica vedremo come preparare l&#8217;ambiente Docker sul server, definire il file docker-compose.yml con le porte e i volumi necessari, avviare il container e completare la configurazione iniziale tramite l&#8217;interfaccia web di AdGuard Home impostando il DNS upstream, le liste di blocco (blocklist) e puntando i dispositivi della rete verso il nuovo server DNS.</p>
<p>Al termine avrai un servizio DNS filtrante, centralizzato e facilmente mantenibile, pronto per essere esteso in un secondo momento con funzionalità più avanzate come il filtraggio DNS-over-HTTPS/TLS o regole personalizzate.</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Un&#8217;istanza Ubuntu Server 26.04 aggiornata</li>
<li>Docker Engine e plugin Docker Compose installati</li>
<li>Accesso root o utente con permessi sudo</li>
<li>Porta 53 (DNS) libera sull&#8217;host</li>
</ul>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Se Docker non è presente installarlo con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -fsSL https://get.docker.com | sudo shsudo usermod -aG docker $USER

newgrp docker</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE STRUTTURA DI CARTELLE</strong></h3>
<p>Creare la struttura delle cartelle con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo mkdir -p /opt/adguardhome/{work,conf}

cd /opt/adguardhome</pre><p>Di seguito le cartelle che verranno create:</p>
<p><strong>work/</strong>: conterrà dati, log e query log</p>
<p><strong>conf/</strong>: conterrà il file di configurazione AdGuardHome.yaml</p>
<p>&nbsp;</p>
<h3><strong>LIBERARE LA PORTA 53 DA SYSTEMD-RESOLVED</strong></h3>
<p>Su Ubuntu systemd-resolved occupa di default la porta 53 in ascolto su 127.0.0.53, in conflitto con AdGuard Home.</p>
<p>Va disabilitato lo stub listener editando il file <strong>resolved.conf</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano /etc/systemd/resolved.conf</pre><p>Modificare o aggiungere le seguenti righe:</p><pre class="urvanov-syntax-highlighter-plain-tag">[Resolve]
DNS=1.1.1.1
DNSStubListener=no</pre><p>Salvare e chiudere il file di configurazione</p>
<p>Poi eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved</pre><p>Verificare che la porta sia libera con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ss -tulpn | grep :53</pre><p>Non deve restituire nulla legato a systemd-resolved.</p>
<h3><strong>CREAZIONE DEL FILE DOCKER-COMPOSE.YML</strong></h3>
<p>Creare il file <strong>docker-compose.yml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">nano /opt/adguardhome/docker-compose.yml</pre><p>All&#8217;interno del file inserire il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
adguardhome:
container_name: adguardhome
image: adguard/adguardhome:latest
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "3000:3000/tcp" # setup wizard iniziale
- "80:80/tcp" # dashboard dopo il setup
- "443:443/tcp" # opzionale, HTTPS/DoH
- "853:853/tcp" # opzionale, DNS-over-TLS
- "3053:3053/udp" # opzionale, DNS-over-QUIC
volumes:
- /opt/adguardhome/work:/opt/adguardhome/work
- /opt/adguardhome/conf:/opt/adguardhome/conf</pre><p>Salvare e chiudere il file di configurazione</p>
<p>&nbsp;</p>
<h3><strong>AVVIO DEL CONTAINER</strong></h3>
<p>Avviare il container con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/adguardhome

docker compose up -d</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 10/10
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image adguard/adguardhome:latest Pulled
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Network adguardhome_default Created
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container adguardhome Started</pre><p>Eseguire un controllo rapido con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs -f adguardhome</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">adguardhome | 2026/08/25 13:58:07.191706 [info] starting adguard home version="AdGuard Home, version v0.107.79"
adguardhome | 2026/08/25 13:58:07.192729 [info] this is the first time adguard home has been launched
adguardhome | 2026/08/25 13:58:07.192783 [info] checking if adguard home has the necessary permissions
adguardhome | 2026/08/25 13:58:07.193080 [info] adguard home can bind to port 53
adguardhome | 2026/08/25 13:58:07.194789 [info] tls_manager: using default ciphers
adguardhome | 2026/08/25 13:58:07.195988 [info] webapi: initializing
adguardhome | 2026/08/25 13:58:07.196037 [info] webapi: This is the first launch of AdGuard Home, redirecting everything to /install.html
adguardhome | 2026/08/25 13:58:07.196105 [info] permcheck: warning: found unexpected permissions type=directory path=/opt/adguardhome/work perm=0755 want=0700
adguardhome | 2026/08/25 13:58:07.196153 [info] webapi: AdGuard Home is available at the following addresses:
adguardhome | 2026/08/25 13:58:07.196295 [info] webapi: serving url=http://127.0.0.1:3000
adguardhome | 2026/08/25 13:58:07.196327 [info] webapi: serving url=http://[::1]:3000
adguardhome | 2026/08/25 13:58:07.196339 [info] webapi: serving url=http://172.19.0.2:3000
adguardhome | 2026/08/25 13:58:07.196381 [info] starting plain server server=plain addr=0.0.0.0:3000</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>SETUP WIZARD INIZIALE</strong></h3>
<p>Aprire il browser su:</p>
<p><strong>http://&lt;IP-DEL-SERVER&gt;:3000</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124670 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-01-1024x402.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="402" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 10" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-01-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-01-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Inizia</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124671 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-02-1024x402.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="402" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 11" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-02-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-02-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Il wizard chiede:</p>
<p><strong>Interfaccia web</strong>: porta consigliata 80 (o altra se già in uso, es. se hai Nginx Proxy Manager su quella macchina)<br />
<strong>Interfaccia DNS</strong>: selezionare l&#8217;IP dell&#8217;host porta 53</p>
<p>Cliccare <strong>Prossimo</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124672 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-03-1024x401.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="401" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 12" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-03-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-03-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire l&#8217;utenza amministrativa con relativa password quindi cliccare <strong>Prossimo</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124673 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-04-1024x400.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="400" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 13" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-04-980x383.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-04-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Affinché AdGuard Home inizi a funzionare, è necessario configurare i dispositivi per utilizzarlo.</p>
<p><strong>ATTENZIONE</strong>: Questa configurazione copre automaticamente tutti i dispositivi collegati al router di casa, non è necessario configurarli manualmente.</p>
<p>Accedi alle preferenze del tuo router. Di solito, puoi farlo dal tuo browser tramite un URL, come http://192.168.0.1/ o http://192.168.1.1/.</p>
<p>Potrebbe esserti chiesto di inserire una password. Se non dovessi ricordarla, puoi reimpostare la password premendo un pulsante presente sullo stesso router, ma tieni presente che scegliendo questa procedura, probabilmente perderai l&#8217;intera configurazione del router.</p>
<p>Se il tuo router necessitasse di un&#8217;app per configurarlo, installala sul tuo telefono o PC e utilizzala per accedere alle impostazioni del router.</p>
<p>Trova le impostazioni DHCP / DNS. Cerca le lettere DNS accanto a un campo che consente due o tre serie di numeri, ciascuno suddiviso in quattro gruppi di 1-3 cifre.</p>
<p>Inserisci qui gli indirizzi del tuo server AdGuard Home.</p>
<p>Su alcuni tipi di router, non è possibile configurare un server DNS personalizzato. In tal caso, configurare AdGuard Home come un server DHCP potrebbe aiutare.</p>
<p>In alternativa, dovresti leggere il manuale di istruzioni per capire come personalizzare i server DNS sul tuo specifico modello di router.</p>
<p>Cliccare <strong>Prossimo</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124674 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-05-1024x401.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="401" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 14" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-05-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-05-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Al termine del wizard cliccare su <strong>Apri pannello di controllo</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124675 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-06-1024x402.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="402" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 15" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-06-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-06-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Verrà aperto il link <strong>http://&lt;IP-DEL-SERVER&gt;</strong></p>
<p>Inserire le credenziali create in precedenza e cliccare <strong>Accedi</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124679 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-07-1024x401.png" alt="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose - Raffaele Chiatto" width="1024" height="401" title="Installazione e Configurazione Base di AdGuard Home su Ubuntu Server 26.04 con Docker Compose 16" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-07-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/inst-adguard-ubuntu-07-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è andato tutto a buon fine dovremmo visualizzare la <strong>Dashboard di AdGuard</strong></p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEI CLIENT NELLA RETE</strong></h3>
<p>Per far usare AdGuard Home come DNS a tutti i dispositivi, la via più efficiente è impostarlo come DNS server sul router/gateway (DHCP), così ogni client lo riceve automaticamente.</p>
<p>In alternativa può essere configurato manualmente client per client.</p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE FILTRI DNS E UPSTREAM</strong></h3>
<p>Dal pannello di controllo le sezioni consigliate:</p>
<p><strong>Filters → DNS blocklists</strong>: aggiungi liste come AdGuard DNS filter, EasyList, OISD</p>
<p><strong>Settings → DNS settings → Upstream DNS servers</strong>: consigliato usare provider con DoH/DoT, es. Cloudflare (https://cloudflare-dns.com/dns-query) o Quad9</p>
<p><strong>Settings → DNS settings → Parental control (opzionale)</strong></p>
<p><strong>Query Log</strong>: utile per verificare cosa viene bloccato e diagnosticare falsi positivi</p>
<p>&nbsp;</p>
<h3><strong>REVERSE PROXY HTTPS (OPZIONALE)</strong></h3>
<p>Se il pannello deve essere raggiungibile dall&#8217;esterno o con certificato valido, meglio metterlo dietro un reverse proxy (es. Nginx Proxy Manager) piuttosto che esporre direttamente la porta 80/443 del container:</p>
<p><strong>adguard.tuodominio.tld → http://&lt;IP-host&gt;:80</strong></p>
<p>Ricorda di non esporre pubblicamente la porta DNS (53) se non necessario.</p>
<h3></h3>
<h3><strong>AGGIORNAMENTO DEL CONTAINER</strong></h3>
<p>Eseguire l&#8217;aggiornamento del container con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /opt/adguardhome
docker compose pull
docker compose up -d</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>PRO E CONTRO</strong></h3>
<h4><strong>Pro</strong></h4>
<ul>
<li>Blocco pubblicità e tracker a livello di rete, per tutti i dispositivi</li>
<li>Supporto nativo a DoH/DoT/DoQ per DNS cifrato</li>
<li>Pannello web chiaro, query log dettagliato</li>
<li>Leggero, gira bene anche su hardware modesto (es. Raspberry Pi)</li>
<li>Parental control e regole personalizzate integrate</li>
</ul>
<h4><strong>Contro</strong></h4>
<ul>
<li>Richiede di liberare la porta 53, che su Ubuntu significa disabilitare lo stub di systemd-resolved</li>
<li>Punto singolo di fallimento per la risoluzione DNS: se il container si ferma, senza DNS di fallback configurato sul router la rete perde la risoluzione nomi</li>
<li>Non ha clustering/HA nativo: per ridondanza vera serve una seconda istanza e configurazione manuale sui client/DHCP</li>
</ul>
<p>&nbsp;</p>
<h3><strong>CONCLUSIONI</strong></h3>
<p>Con questa configurazione hai un servizio DNS filtrante centralizzato, gestibile e aggiornabile in due comandi.</p>
<p>Per un homelab, il passo successivo naturale è mettere in piedi una seconda istanza su un altro host per avere un DNS di backup, così da evitare che un riavvio o un aggiornamento del container lasci la rete senza risoluzione DNS.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-adguard-home-su-ubuntu-server-26-04-con-docker-compose/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID</title>
		<link>https://www.raffaelechiatto.com/configurazione-autenticazione-sso-saml-tra-anthropic-claude-team-e-il-tenant-microsoft-entra-id/</link>
					<comments>https://www.raffaelechiatto.com/configurazione-autenticazione-sso-saml-tra-anthropic-claude-team-e-il-tenant-microsoft-entra-id/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 14 Sep 2026 06:33:45 +0000</pubDate>
				<category><![CDATA[Anthropic Claude]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[MicrosoftEntra]]></category>
		<category><![CDATA[SAML]]></category>
		<category><![CDATA[SSO]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124585</guid>

					<description><![CDATA[&#160; Nell&#8217;ambito di un percorso continuo di rafforzamento della sicurezza informatica e di semplificazione della gestione degli accessi, molte organizzazioni stanno adottando soluzioni di autenticazione centralizzata basate su standard federati come SAML. In questo articolo vedremo come configurare l&#8217;integrazione SSO SAML tra Claude Team e il tenant Microsoft Entra ID (ex Azure AD), illustrando passo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="679" height="89" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 50" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Nell&#8217;ambito di un percorso continuo di rafforzamento della sicurezza informatica e di semplificazione della gestione degli accessi, molte organizzazioni stanno adottando soluzioni di autenticazione centralizzata basate su standard federati come SAML.</p>
<p>In questo articolo vedremo come configurare l&#8217;integrazione SSO SAML tra Claude Team e il tenant Microsoft Entra ID (ex Azure AD), illustrando passo dopo passo le operazioni necessarie sia lato Microsoft Entra che lato Claude Team, con l&#8217;obiettivo di garantire un accesso sicuro, tracciabile e uniforme per tutti gli utenti dell&#8217;organizzazione.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>Piano Claude Team attivo, con ruolo Owner o Primary Owner</li>
<li>Accesso admin a Entra ID (Global Admin o Application Administrator)</li>
<li>Accesso DNS del dominio nposervices.com per creare un record TXT</li>
</ul>
<p>&nbsp;</p>
<h3><strong>VERIFICA DEL DOMINIO SU CLAUDE</strong></h3>
<p>Andare sul sito <a href="claude.ai/admin-settings/organization" target="_blank" rel="noopener">claude.ai/admin-settings/organization</a></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124591 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-01-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 51" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-01-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-01-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Nella sezione <strong>Organization and access</strong> Individuare <strong>Domains</strong>. Quindi avviare la verifica del dominio inserito cliccando su <strong>Verifiy</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124592 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-02-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 52" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-02-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-02-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Si aprirà una nuova finestra dove dobbiamo inserire il dominio da verificare quindi cliccare <strong>Continue</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124593 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-03-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 53" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-03-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-03-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>In automatico verrà aperta una schermata con le istruzioni da seguire per la validazione.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124594 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-04-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 54" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-04-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-04-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Al fondo della pagine troviamo il <strong>record TXT</strong> da creare nel nostro dominio per la validazione</p>
<p><strong>NOTA BENE</strong>: nel mio caso dovrò censire il record TXT su Godaddy</p>
<p>Quindi attendere qualche minuto per la propagazione e la verifica in Claude&#8230;</p>
<p><strong>ATTENZIONE</strong>: verificare il dominio non impatta l&#8217;accesso degli utenti esistenti; l&#8217;accesso cambia solo quando il SSO viene effettivamente configurato ed eventualmente forzato.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124595 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-05-1024x507.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="507" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 55" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-05-980x485.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-05-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se tutto è andato a buon fine dopo qualche minuto dovremmo vedere una schermata come quella sovrastante</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124596 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-06-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 56" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-06-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-06-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Ritornando su <a href="claude.ai/admin-settings/organization" target="_blank" rel="noopener">claude.ai/admin-settings/organization</a> dovremmo visualizzare <strong>Verified</strong> come mostrato nell&#8217;ìmmagine sovrastante</p>
<p>&nbsp;</p>
<h3><strong>AVVIO DEL SETUP SSO (FLUSSO WORKOS)</strong></h3>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124598 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-07-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 57" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-07-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-07-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Sempre in <a href="claude.ai/admin-settings/organization" target="_blank" rel="noopener">claude.ai/admin-settings/organization</a> cliccare <strong>Setup SSO</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124599 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-08-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 58" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-08-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-08-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare <strong>Entra ID (Azure AD)SAML</strong> come identity provider</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124600 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-09-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 59" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-09-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-09-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Dovremmo visualizzare la schermata con le istruzioni per la configurazione</p>
<p>Claude ti mostrerà due valori da usare in Entra:</p>
<p><strong>Identifier (Entity ID)</strong><br />
<strong>Reply URL (ACS URL)</strong></p>
<p><strong>ATTENZIONE</strong>: Tenere questa pagina aperta in una scheda mentre lavori su Entra.</p>
<p>&nbsp;</p>
<h3><strong>CREAZIONE DELL&#8217;APP ENTERPRISE IN ENTRA ID</strong></h3>
<p>Andare su <strong>portal.azure.com → Entra ID → Enterprise applications</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-10a.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124656 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-10a-1024x506.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="506" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 60" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-10a-980x484.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-10a-480x237.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>New application</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124602 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-11-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 61" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-11-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-11-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cerca Claude nel gallery e se disponibile selezionala, altrimenti scegli <strong>Create your own application</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124604 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-12-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 62" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-12-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-12-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Chiamare l&#8217;applicazione<strong> Claude SSO</strong> poi selezionare <strong>Integrate any other application you don&#8217;t find in the gallery</strong> e cliccare <strong>Create</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-13.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124605 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-13-1024x507.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="507" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 63" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-13-980x485.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-13-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Nella nuova app cliccare su <strong>Single sign-on</strong> quindi selezionare <strong>SAML</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-14.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124606 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-14-1024x509.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="509" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 64" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-14-980x487.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-14-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Edit</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-15.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124607 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-15-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 65" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-15-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-15-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>In <strong>Basic SAML Configuration</strong> inserire:</p>
<ul>
<li>Identifier (Entity ID) dal flusso Claude</li>
<li>Reply URL (ACS URL) dal flusso Claude</li>
</ul>
<p>Quindi cliccare <strong>Save</strong></p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DEGLI ATTRIBUTI E DEL CLAIM</strong></h3>
<p>Nella sezione <strong>Attributes &amp; Claims</strong> dell&#8217;app SAML</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-16.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124609 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-16-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 66" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-16-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-16-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Edit</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-17.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124610 size-full" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-17.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="767" height="270" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 67" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-17.png 767w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-17-480x169.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 767px, 100vw" /></a></p>
<p>Assicurarsi che le attestazioni richieste elencate di seguito siano configurate.</p>
<p>Le attestazioni potrebbero essere già configurate o meno, a seconda della tua configurazione attuale.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-18.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124611 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-18-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 68" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-18-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-18-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è tutto corretto dovremmo visualizzare un schermata come quella sovrastante</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-19.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124612 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-19-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 69" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-19-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-19-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>È inoltre necessario inviare le appartenenze ai gruppi ad Anthropic utilizzando un attributo gruppi.</p>
<p>Cliccare su <strong>Add a Group Claim</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-20.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124613 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-20-1024x507.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="507" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 70" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-20-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-20-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Le appartenenze ai gruppi consentono all&#8217;applicazione di assegnare gli utenti ai ruoli appropriati.</p>
<p>Nel pannello <strong>Group Claims</strong> selezionare <strong>Groups assigned to the application.</strong></p>
<p>Quindi in <strong>Source Attribute</strong> selezionare l&#8217;opzione <strong>Cloud-only group display names</strong></p>
<p>Cliccare <strong>Save</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-21.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124615 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-21-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 71" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-21-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-21-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è tutto Ok dovremmo visualizzare una schermata come quella sovrastante</p>
<p>&nbsp;</p>
<h3><strong>ASSEGNAZIONE UTENTI E GRUPPI</strong></h3>
<p>A questo punto configurare gli utenti e i gruppi per l&#8217;accesso</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-22.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124616 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-22-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 72" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-22-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-22-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare dal menù a sinistra <strong>Users and Groups</strong> quindi cliccare su <strong>Add user/group</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-23.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124617 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-23-1024x512.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="512" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 73" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-23-980x490.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-23-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare il gruppo da assegnare all&#8217;app quindi cliccare <strong>Select</strong></p>
<p><strong>ATTENZIONE</strong>: Quando si assegna un gruppo a un&#8217;applicazione, solo gli utenti che appartengono direttamente a quel gruppo avranno accesso. L&#8217;assegnazione non si propaga ai gruppi annidati.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-24a.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124662 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-24a-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 74" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-24a-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-24a-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare <strong>Assign</strong></p>
<h3></h3>
<h3><strong>AGGIUNGERE IL LOGO ALL&#8217;APPLICAZIONE (OPZIONALE)</strong></h3>
<p>Aggiungere un immagine identificativa all&#8217;applicazione</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-25.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124619 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-25-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 75" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-25-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-25-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare sul pulsante indicato dalla freccia</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-26.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124621 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-26-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 76" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-26-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-26-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;immagine quindi cliccare <strong>Save</strong></p>
<p>&nbsp;</p>
<h3><strong>CONFIGURAZIONE DELL&#8217;IDENTITY PROVIDER METADATA</strong></h3>
<p>Seguire la procedura che riporto di seguito per una configurazione dinamica</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-27.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124622 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-27-1024x512.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="512" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 77" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-27-980x490.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-27-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Nel menu di navigazione a sinistra selezionare la scheda <strong>Single sign-on</strong>.</p>
<p>Scorrere verso il basso fino alla sezione <strong>SAML Certificates</strong>.</p>
<p>Individuare l&#8217;<strong>App Federation Metadata Url</strong> quindi copiarlo</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-28.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124623 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-28-1024x512.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="512" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 78" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-28-980x490.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-28-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Incollare l&#8217;URL copiato nella pagina di configurazione di Claude come mostrato nell&#8217;immagine sovrastante</p>
<p>Cliccare <strong>Continue</strong></p>
<p>&nbsp;</p>
<h3><strong>TEST DI AUTENTICAZIONE</strong></h3>
<p>Nella pagina successiva di Claude è possibile eseguire un test di autenticazione</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-29.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124625 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-29-1024x508.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="508" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 79" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-29-980x486.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-29-480x238.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Continue to sign-in -&gt;</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-30.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124626 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-30-1024x510.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="510" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 80" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-30-980x488.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-30-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se tutto è andato a buon fine dovremmo visualizzare una schermata come quella sovrastante che ci dice che la connessione è attiva</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-31.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124627 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-31-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 81" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-31-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-31-480x239.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Conferma definitiva che è tutto OK la da la schermata sovrastante&#8230;</p>
<p>&nbsp;</p>
<h3><strong>TIPS AND TRICKS</strong></h3>
<p>Su Claude in <strong>User provisioning</strong> selezionare <strong>Just-in-Time (JIT)</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-32.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124628 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-32-1024x511.png" alt="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID - Raffaele Chiatto" width="1024" height="511" title="Configurazione autenticazione SSO SAML tra Anthropic Claude Team e il tenant Microsoft Entra ID 82" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-32-980x489.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/SSO-Claude-Entra-32-480x240.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Gli utenti assegnati alla tua app IdP riceveranno automaticamente il ruolo User al primo login senza configurazione aggiuntiva</p>
<p>Una volta validato con il gruppo pilota tornare nelle impostazioni identità di Claude e abilitare <strong>Require SSO</strong> per obbligare tutti gli accessi tramite Entra</p>
<p>Puoi anche disabilitare i magic link via email a questo punto</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/configurazione-autenticazione-sso-saml-tra-anthropic-claude-team-e-il-tenant-microsoft-entra-id/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come aggiornare da Ubuntu 24.04 a Ubuntu 26.04 LTS (Resolute Raccoon): guida passo-passo</title>
		<link>https://www.raffaelechiatto.com/come-aggiornare-da-ubuntu-24-04-a-ubuntu-26-04-lts-resolute-raccoon-guida-passo-passo/</link>
					<comments>https://www.raffaelechiatto.com/come-aggiornare-da-ubuntu-24-04-a-ubuntu-26-04-lts-resolute-raccoon-guida-passo-passo/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 10 Sep 2026 06:36:32 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ResoluteRaccoon]]></category>
		<category><![CDATA[upgrade]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124573</guid>

					<description><![CDATA[&#160; Con il rilascio di Ubuntu 26.04 LTS &#8220;Resolute Raccoon&#8221;, è arrivato il momento di pianificare l&#8217;aggiornamento dei sistemi che finora abbiamo mantenuto su Ubuntu 24.04 LTS. Come ogni passaggio tra due versioni Long Term Support, si tratta di un&#8217;operazione che porta con sé nuovi pacchetti, kernel aggiornato e miglioramenti sotto il cofano, ma che [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091056 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR.png" alt="Come aggiornare da Ubuntu 24.04 a Ubuntu 26.04 LTS (Resolute Raccoon): guida passo-passo - Raffaele Chiatto" width="679" height="89" title="Come aggiornare da Ubuntu 24.04 a Ubuntu 26.04 LTS (Resolute Raccoon): guida passo-passo 84" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/INTERMEDIATE-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Con il rilascio di Ubuntu 26.04 LTS &#8220;Resolute Raccoon&#8221;, è arrivato il momento di pianificare l&#8217;aggiornamento dei sistemi che finora abbiamo mantenuto su Ubuntu 24.04 LTS.</p>
<p>Come ogni passaggio tra due versioni Long Term Support, si tratta di un&#8217;operazione che porta con sé nuovi pacchetti, kernel aggiornato e miglioramenti sotto il cofano, ma che va affrontata con il giusto metodo per evitare sorprese, specialmente su server di produzione o macchine che ospitano servizi critici.</p>
<p>In questa guida vedremo passo dopo passo come eseguire l&#8217;upgrade in sicurezza: dai controlli preliminari da fare prima di iniziare (backup, spazio su disco, repository di terze parti), fino al comando do-release-upgrade e alla verifica finale del sistema una volta completata la migrazione.</p>
<p>Vedremo anche come comportarsi in caso di problemi durante l&#8217;aggiornamento e quali accortezze adottare se il sistema fa parte di un ambiente di homelab o di produzione.</p>
<p>Se gestisci uno o più server Ubuntu e vuoi affrontare questo passaggio senza rischi, continua a leggere.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<p>Backup obbligatorio: snapshot della VM (o backup completo di /etc, dei file di configurazione, dei volumi Docker e dei database) prima di procedere.</p>
<p>Percorso supportato: si può passare direttamente da 24.04 a 26.04. Se una macchina è ancora su 22.04, deve prima passare a 24.04.</p>
<p>Nota sui tempi: Canonical apre l&#8217;upgrade diretto 24.04 → 26.04 solo dopo la prima point release (26.04.1). Se il comando do-release-upgrade restituisce &#8220;There is no development version of an LTS available&#8221;, significa che la point release non è ancora disponibile per il tuo sistema.</p>
<h3><strong>AGGIORNAMENTO DEL SISTEMA ATTUALE</strong></h3>
<p>Eseguire i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update
sudo apt full-upgrade -y
sudo apt --purge autoremove -y</pre><p>Se viene installato un nuovo kernel, riavviare prima di proseguire con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo reboot</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DELLO STRUMENTO DI UPGRADE</strong></h3>
<p>Eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install update-manager-core -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONTROLLO DELL&#8217;IMPOSTAZIONE DEL PROMPT DI UPGRADE</strong></h3>
<p>Controllare l&#8217;impostazione del prompt di upgrade con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">cat /etc/update-manager/release-upgrades</pre><p>Assicurarsi che la riga Prompt= sia impostata su lts (non never).</p>
<p>&nbsp;</p>
<h3><strong>PREPARAZIONE DI UNA SESSIONE RESILIENTE (CONSIGLIATO SU SERVER REMOTI)</strong></h3>
<p>Preparare una sessione resiliente con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install screen -y
screen -S upgrade</pre><p>In questo modo, se la connessione SSH cade durante l&#8217;upgrade, puoi ricollegarti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">screen -r upgrade</pre><p>Il tool do-release-upgrade apre anche un demone SSH di riserva sulla porta 1022. Se hai il firewall attivo aprila temporaneamente con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo ufw allow 1022/tcp
sudo ufw reload</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>AVVIARE L&#8217;UPGRADE</strong></h3>
<p>Avviare l&#8217;upgrade con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo do-release-upgrade</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>ERRORE &#8220;NO DEVELOPMENT VERSION OF AN LTS AVAILABLE&#8221;</strong></h3>
<p>Se si riceve l&#8217;errore &#8220;<strong>no development version of an LTS available</strong>&#8221; significa che la point release 26.04.1 non è ancora stata rilasciata/propagata al tuo sistema.</p>
<p>E&#8217; possibile forzare l&#8217;upgrade con il flag -d:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo do-release-upgrade -d</pre><p>Il flag -d non installa una versione beta: 26.04 è già rilasciata stabilmente da aprile 2026.</p>
<p>Bypassa solo il rollout graduale di Canonical. Su sistemi di produzione, se non c&#8217;è fretta, è comunque più prudente attendere che la point release sia disponibile e usare il comando semplice.</p>
<p>&nbsp;</p>
<h3><strong>SEGUIRE LE RICHIESTE INTERATTIVE</strong></h3>
<p>Durante l&#8217;upgrade ti verranno poste alcune domande:</p>
<ul>
<li>File di configurazione modificati (es. sshd_config): scegli &#8220;Install the package maintainer&#8217;s version&#8221; per ottenere i nuovi default, poi riapplica manualmente le tue personalizzazioni dopo l&#8217;upgrade.</li>
<li>Repository di terze parti (PPA): verranno disabilitati temporaneamente; potrai riabilitarli/verificarli dopo.</li>
<li>Rimozione pacchetti obsoleti: conferma con y.</li>
<li>Riavvio finale: conferma con y quando richiesto.</li>
</ul>
<p><strong>ATTENZIONE</strong>: Non interrompere il processo una volta iniziata l&#8217;installazione dei pacchetti.</p>
<p>&nbsp;</p>
<h3><strong>VERIFICA POST UPGRADE</strong></h3>
<p>Dopo il riavvio ricontrollare che tutto sia andato a buon fine con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">lsb_release -a
cat /etc/os-release
uname -r</pre><p>Dovresti vedere <strong>VERSION_ID=&#8221;26.04&#8243; e VERSION_CODENAME=&#8221;resolute&#8221;.</strong></p>
<p>Controllare eventuali servizi falliti con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">systemctl --failed</pre><p>Controlla pacchetti rotti o in sospeso con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo dpkg --audit
sudo apt --fix-broken install
apt list --upgradable
sudo apt update
sudo apt upgrade -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONTROLLI POST UPGRADE</strong></h3>
<p>Di seguito le cose da controllare con attenzione dopo l&#8217;upgrade:</p>
<ul>
<li>cgroup v2 obbligatorio: il supporto a cgroup v1 è stato rimosso. Se usi Docker, LXC o altri runtime di container (es. i tuoi stack Docker Compose per LibreNMS, Gitea, Vaultwarden, CrowdSec, ecc.), verificare che tutto riparta correttamente.</li>
<li>Repository di terze parti: se qualche sorgente APT fa ancora riferimento a noble invece di resolute, aggiornala manualmente.</li>
<li>PPA obsoleti: verifica compatibilità dei PPA con 26.04 prima di riabilitarli.</li>
</ul>
<p>&nbsp;</p>
<h3><strong>RIEPILOGO DEI COMANDI IN SEQUENZA</strong></h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag"># 1. Aggiornamento sistema attuale
sudo apt update
sudo apt full-upgrade -y
sudo apt --purge autoremove -y
sudo reboot # solo se è stato installato un nuovo kernel

# 2. Strumento di upgrade
sudo apt install update-manager-core -y

# 3. Verifica configurazione prompt
cat /etc/update-manager/release-upgrades

# 4. Sessione resiliente (opzionale ma consigliata)
sudo apt install screen -y
screen -S upgrade
sudo ufw allow 1022/tcp
sudo ufw reload

# 5. Avvio upgrade
sudo do-release-upgrade
# Se non disponibile:
sudo do-release-upgrade -d

# 6. Verifica finale (dopo il riavvio automatico)
lsb_release -a
cat /etc/os-release
uname -r
systemctl --failed
sudo dpkg --audit
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade -y</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>CONSIDERAZIONI FINALI</strong></h3>
<p>Ecco un riepilogo delle principali differenze tra Ubuntu 24.04 LTS (Noble Numbat) e Ubuntu 26.04 LTS (Resolute Raccoon):</p>
<h4><strong>Kernel e core di sistema</strong></h4>
<ul>
<li><strong>Kernel</strong>: dalla serie 6.x si passa al kernel Linux 7.0, con supporto Rust ora stabile (non più sperimentale) e miglior supporto per hardware recente.</li>
<li><strong>cgroup v2 obbligatorio</strong>: cgroup v1 non è più supportato e i sistemi che lo usano ancora vengono bloccati durante l&#8217;upgrade; le immagini container basate su Ubuntu più vecchie di 18.04 LTS non funzionano su un host 26.04.</li>
<li>Questo è probabilmente il breaking change più rilevante per chi gestisce ambienti Docker/K3S.</li>
<li><strong>systemd 259</strong>: con rimozione completa del supporto a cgroup v1.</li>
<li><strong>Rust-based utilities</strong>: Canonical ha introdotto utility di sistema riscritte in Rust per una maggiore sicurezza della memoria, incluso un sudo basato su Rust.</li>
</ul>
<h4><strong>Desktop (meno rilevante per i tuoi server, ma utile saperlo)</strong></h4>
<ul>
<li><strong>GNOME 50 (da GNOME 46):</strong> con notifiche raggruppate, supporto HDR sui display compatibili, minore uso di CPU/memoria e miglior supporto per desktop remoto.</li>
<li><strong>Wayland-only</strong>: la sessione GNOME ora gira esclusivamente su Wayland; X11 non è più disponibile come opzione di sessione in GDM, anche se XWayland resta per la retrocompatibilità.</li>
<li><strong>Nuove app di default</strong>: Papers, Loupe, Ptyxis, Resources, Showtime al posto dei rispettivi predecessori.</li>
<li><strong>RAM minima</strong>: il requisito desktop sale da 4 GB (24.04) a 6 GB (26.04).</li>
</ul>
<h4><strong>Sicurezza</strong></h4>
<ul>
<li>Security Center integrato nel desktop e crittografia full-disk basata su TPM, con sblocco automatico al boot dopo verifica dell&#8217;integrità.</li>
<li>Supporto alla crittografia post-quantum in OpenSSL.</li>
<li>Livepatch ora disponibile anche per server ARM64.</li>
<li>Stack server/sviluppo (la parte che ti interessa di più)</li>
<li>Stack server aggiornato con PostgreSQL 18, Docker 29 e PHP 8.5</li>
<li>Dracut sostituisce initramfs-tools, APT aggiornato alla versione 3.1 con un dependency resolver migliorato.</li>
<li>Supporto nativo a NVIDIA CUDA e AMD ROCm inclusi direttamente nei repository, utile se pensi ad AI/ML nel tuo homelab.</li>
</ul>
<h4><strong>Tempistiche di upgrade importanti</strong></h4>
<ul>
<li>L&#8217;upgrade diretto da Ubuntu 24.04 LTS sarà disponibile solo dopo Ubuntu 26.04.1, previsto per il 6 agosto 2026.</li>
<li>Supporto: 5 anni standard (fino ad aprile 2031), estendibile fino a 10-15 anni con Ubuntu Pro.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/come-aggiornare-da-ubuntu-24-04-a-ubuntu-26-04-lts-resolute-raccoon-guida-passo-passo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Esportazione Automatizzata di una VM in OVF/OVA da vCenter con PowerCLI e OVF Tool</title>
		<link>https://www.raffaelechiatto.com/esportazione-automatizzata-di-una-vm-in-ovf-ova-da-vcenter-con-powercli-e-ovf-tool/</link>
					<comments>https://www.raffaelechiatto.com/esportazione-automatizzata-di-una-vm-in-ovf-ova-da-vcenter-con-powercli-e-ovf-tool/#respond</comments>
		
		<dc:creator><![CDATA[Angelo Lauria]]></dc:creator>
		<pubDate>Mon, 07 Sep 2026 06:51:56 +0000</pubDate>
				<category><![CDATA[Virtualizzazione]]></category>
		<category><![CDATA[VmWare]]></category>
		<category><![CDATA[ova]]></category>
		<category><![CDATA[ovf]]></category>
		<category><![CDATA[ovftool]]></category>
		<category><![CDATA[PowerCLI]]></category>
		<category><![CDATA[powershell]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124851</guid>

					<description><![CDATA[&#160; Quando si amministrano ambienti virtualizzati su VMware vSphere, capita spesso di dover esportare una VM come pacchetto OVF/OVA — ad esempio per un backup &#8220;a freddo&#8221;, per spostarla su un altro sito, o per consegnarla a un fornitore/partner come immagine autonoma. Dal client vSphere l&#8217;operazione è semplice: tasto destro sulla VM, &#8220;Export System Image&#8221;, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="Esportazione Automatizzata di una VM in OVF/OVA da vCenter con PowerCLI e OVF Tool - Raffaele Chiatto" width="679" height="89" title="Esportazione Automatizzata di una VM in OVF/OVA da vCenter con PowerCLI e OVF Tool 86" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Quando si amministrano ambienti virtualizzati su VMware vSphere, capita spesso di dover esportare una VM come pacchetto OVF/OVA — ad esempio per un backup &#8220;a freddo&#8221;, per spostarla su un altro sito, o per consegnarla a un fornitore/partner come immagine autonoma. Dal client vSphere l&#8217;operazione è semplice: tasto destro sulla VM, &#8220;Export System Image&#8221;, e — se serve un pacchetto davvero fedele all&#8217;originale si spuntano le opzioni avanzate &#8220;Include BIOS UUID&#8221;, &#8220;Include MAC addresses&#8221; e &#8220;Include extra configuration&#8221;.</p>
<p>Il problema nasce quando questa esportazione va ripetuta più volte, magari su VM diverse o su vCenter diversi, e si vuole evitare di rifare manualmente tutti i click ogni volta — con il rischio di dimenticare proprio una di quelle tre checkbox avanzate, che sono facili da tralasciare ma spesso indispensabili (ad esempio per VM di sincronizzazione/DR che devono mantenere lo stesso BIOS UUID e gli stessi MAC address quando vengono re-importate altrove). Lo script che segue automatizza l&#8217;intero processo da PowerShell, usando PowerCLI per il lookup della VM e la gestione dello stato di accensione, e VMware OVF Tool per l&#8217;export vero e proprio — perché è l&#8217;unico strumento che espone il flag &#8211;exportFlags necessario per includere quelle opzioni avanzate. Il cmdlet PowerCLI Export-VApp, da solo, non le supporta.</p>
<p>&nbsp;</p>
<h3><strong>PREREQUISITI</strong></h3>
<ul>
<li>PowerShell 5.1 o superiore, su Windows.</li>
<li>Modulo VMware.PowerCLI (lo script lo installa automaticamente per l&#8217;utente corrente se non è già presente).</li>
<li>VMware OVF Tool installato sulla macchina che esegue lo script. Non è incluso in PowerCLI: va scaricato a parte dal portale supporto Broadcom/VMware. Percorso tipico di installazione: C:\Program Files\VMware\VMware OVF Tool\ovftool.exe.</li>
<li>Accesso in scrittura al percorso di destinazione (locale o condivisione UNC).</li>
<li>Permessi su vCenter sufficienti per l&#8217;export: ruolo Administrator, oppure un ruolo custom con i privilegi Virtual machine &gt; Provisioning &gt; Allow disk access / Allow read-only disk access.</li>
</ul>
<p><strong>NOTA BENE</strong>: per installare PowerCLI manualmente, da una console PowerShell (non necessariamente elevata, basta lo scope utente) eseguire:</p><pre class="urvanov-syntax-highlighter-plain-tag">Install-Module VMware.PowerCLI -Scope CurrentUser -Force</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>FUNZIONALITÀ DELLO SCRIPT</strong></h3>
<p>Lo script fa le seguenti cose:</p>
<ul>
<li>Chiede quale vCenter usare tramite un menu (1/2/3), oppure accetta la scelta come parametro per esecuzioni non interattive.</li>
<li>Chiede il nome esatto della VM da esportare, se non passato come parametro.</li>
<li>Si autentica sempre con l&#8217;utente Windows correntemente loggato sulla macchina: nessuna username da digitare. Prova prima l&#8217;autenticazione SSO/SSPI silenziosa (zero prompt); se il vCenter non ha questa funzionalità abilitata lato SSO, ricade automaticamente su un prompt Get-Credential già precompilato con l&#8217;utente corrente.</li>
<li>Riusa la stessa credenziale raccolta per PowerCLI anche per ovftool, evitando di chiederla una seconda volta. Se invece l&#8217;SSO/SSPI di PowerCLI ha funzionato (zero prompt), per ovftool resta comunque necessaria una password, perché — a differenza di PowerCLI — non ha alcun equivalente dell&#8217;autenticazione integrata di Windows: è un limite del tool, non dello script.</li>
<li>Verifica che la destinazione sia scrivibile prima di toccare vCenter (fail-fast), creando la cartella se non esiste.</li>
<li>Individua la VM su vCenter e ne controlla lo stato di accensione.</li>
<li>Spegne opzionalmente la VM prima dell&#8217;export, per garantirne la consistenza: prova prima uno shutdown &#8220;gentile&#8221; del guest OS (via VMware Tools), e solo se non va a buon fine entro un timeout ricorre a uno spegnimento forzato (Stop-VM).</li>
<li>Esegue l&#8217;export vero e proprio con ovftool, includendo per default tutte e tre le opzioni avanzate (&#8211;exportFlags=mac,uuid,extraconfig), replicando esattamente quanto fa il client vSphere con &#8220;Enable advanced options&#8221; spuntato su tutte e tre le voci.</li>
<li>Riaccende la VM al termine, se richiesto e se era accesa prima dell&#8217;intervento dello script.</li>
<li>Supporta -WhatIf / -Confirm su tutte le operazioni che modificano lo stato (spegnimento/accensione, scrittura dei file), così è possibile simulare l&#8217;esecuzione prima di lanciarla sul serio.</li>
<li>Tiene un log timestampato di tutta l&#8217;operazione su file, oltre che a video.</li>
</ul>
<p>Per impostazione predefinita lo script non spegne la VM: esporta lo stato &#8220;a caldo&#8221; (ovftool esegue comunque l&#8217;export, ma senza garanzia di consistenza applicativa se non c&#8217;è un quiescing via VMware Tools). Per un export garantito consistente si usa il parametro -PowerOffFirst (con eventuale riaccensione al termine tramite -PowerOnAfter).</p>
<h3></h3>
<h3><strong>SCRIPT COMPLETO</strong></h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">#Requires -Version 5.1
&lt;#
.SYNOPSIS
Esporta una VM da vCenter come pacchetto OVF/OVA su un percorso di rete
(UNC), includendo le stesse opzioni avanzate del client vSphere (Include
BIOS UUID, Include MAC addresses, Include extra configuration).
.PARAMETER VCenterChoice
"1", "2" o "3" per scegliere il vCenter senza il prompt interattivo:
1 = vcenter01.azienda.local
2 = vcenter02.azienda.local
3 = vcenter03.azienda.local
Se omesso, lo script mostra il menu e chiede la scelta.
.PARAMETER VMName
Nome esatto della VM da esportare. Se omesso, lo script lo chiede
interattivamente.
.PARAMETER DestinationPath
Cartella di destinazione (UNC o locale). Il file descrittore
(&lt;VMName&gt;.ovf o &lt;VMName&gt;.ova) verra' creato al suo interno; per il
formato Ovf, i file .mf e .vmdk vengono scritti nella stessa cartella.
Puoi anche indicare direttamente il percorso file completo.
.PARAMETER Format
"Ovf" (default, produce .ovf + .mf + uno o piu' .vmdk in una cartella) o
"Ova" (un unico file .ova).
.PARAMETER ExportFlags
Opzioni avanzate da includere nel pacchetto OVF, equivalenti alle
checkbox del client vSphere in "Enable advanced options". Default: tutte
e tre — @('mac','uuid','extraconfig') — cioe' Include MAC addresses,
Include BIOS UUID, Include extra configuration.
.PARAMETER OvftoolPath
Percorso di ovftool.exe. Se omesso, lo script cerca nelle posizioni di
installazione standard e nel PATH di sistema.
.PARAMETER ShareCredential
Credenziali opzionali da usare per autenticarsi sulla share di rete di
destinazione, se l'utente corrente non ha già accesso al percorso.
.PARAMETER PowerOffFirst
Se presente, spegne la VM (prima gentilmente via Guest OS, poi Stop-VM se
necessario) prima di esportarla, per garantire un export consistente.
.PARAMETER PowerOnAfter
Se presente insieme a -PowerOffFirst, riaccende la VM al termine
dell'export (solo se era accesa prima dello spegnimento fatto dallo script).
.PARAMETER Force
Sovrascrive eventuali file di export già presenti nella destinazione
(--overwrite di ovftool).
.EXAMPLE
.\Export-VM-OVF.ps1
Modalità completamente interattiva: chiede il vCenter (menu 1/2/3) e il
nome della VM, poi esporta in "\\fileserver01.azienda.local\export\ProgettoX".
.EXAMPLE
.\Export-VM-OVF.ps1 -VCenterChoice 2 -VMName "SRV-PROD-SYNC-01" -PowerOffFirst -PowerOnAfter -Force
Nessun prompt per vCenter/VM name (passati come parametro); chiede solo
le credenziali se necessario.
.NOTES
Prerequisiti:
- Modulo VMware.PowerCLI (per il lookup della VM e la gestione power state).
- VMware OVF Tool installato sulla macchina che esegue lo script
(download dal portale supporto Broadcom/VMware — non e' incluso in
PowerCLI). Percorso tipico: "C:\Program Files\VMware\VMware OVF Tool\ovftool.exe".
- Accesso in scrittura al percorso di destinazione.
- Permessi vCenter sufficienti per l'export (ruolo Administrator o
ruolo custom con i privilegi "Virtual machine &gt; Provisioning &gt;
Allow disk access / Allow read-only disk access").
#&gt;
[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'High')]
param(
[Parameter(Mandatory = $false)]
[ValidateSet('1', '2', '3')]
[string]$VCenterChoice = "",
[Parameter(Mandatory = $false)]
[string]$VMName = "",
[Parameter(Mandatory = $false)]
[string]$DestinationPath = "\\fileserver01.azienda.local\export\ProgettoX",
[Parameter(Mandatory = $false)]
[ValidateSet("Ovf", "Ova")]
[string]$Format = "Ovf",
[Parameter(Mandatory = $false)]
[string[]]$ExportFlags = @('mac', 'uuid', 'extraconfig'),
[Parameter(Mandatory = $false)]
[string]$OvftoolPath = "",
[Parameter(Mandatory = $false)]
[System.Management.Automation.PSCredential]$ShareCredential,
[Parameter(Mandatory = $false)]
[switch]$PowerOffFirst,
[Parameter(Mandatory = $false)]
[switch]$PowerOnAfter,
[Parameter(Mandatory = $false)]
[switch]$Force,
[Parameter(Mandatory = $false)]
[int]$GuestShutdownTimeoutSec = 180
)
$ErrorActionPreference = 'Stop'
# Tutte le operazioni usano sempre l'utente Windows correntemente loggato.
$CurrentUserForAuth = "$env:USERDOMAIN\$env:USERNAME"
# ==============================================================================
# Selezione vCenter (menu 1/2/3) — puoi anche passare -VCenterChoice 1|2|3
# per saltare il prompt in esecuzioni non interattive.
# ==============================================================================
$VCenterOptions = [ordered]@{
'1' = 'vcenter01.azienda.local'
'2' = 'vcenter02.azienda.local'
'3' = 'vcenter03.azienda.local'
}
if (-not $VCenterOptions.Contains($VCenterChoice)) {
Write-Host ""
Write-Host "Seleziona il vCenter:" -ForegroundColor Cyan
foreach ($key in $VCenterOptions.Keys) {
Write-Host (" {0}) {1}" -f $key, $VCenterOptions[$key])
}
do {
$VCenterChoice = Read-Host "Scelta (1-3)"
} while (-not $VCenterOptions.Contains($VCenterChoice))
}
$vCenterServer = $VCenterOptions[$VCenterChoice]
# ==============================================================================
# Nome della VM da esportare, se non passato come parametro
# ==============================================================================
if ([string]::IsNullOrWhiteSpace($VMName)) {
do {
$VMName = Read-Host "Nome esatto della VM da esportare"
} while ([string]::IsNullOrWhiteSpace($VMName))
}
$LogFile = Join-Path (Get-Location).Path "Export-VM-OVF_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
$MappedDriveName = $null
$vmWasPoweredOn = $false
$global:VIConnection = $null
$SharedCredential = $null # riusata per ovftool se raccolta durante il fallback PowerCLI, per non chiedere due volte
# ==============================================================================
# Funzioni helper
# ==============================================================================
function Write-Log {
param(
[Parameter(Mandatory = $true)][string]$Message,
[Parameter(Mandatory = $false)][ValidateSet('INFO', 'WARN', 'ERROR', 'OK')][string]$Level = 'INFO'
)
$line = "[{0}] [{1}] {2}" -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $Level, $Message
switch ($Level) {
'WARN' { Write-Host $line -ForegroundColor Yellow }
'ERROR' { Write-Host $line -ForegroundColor Red }
'OK' { Write-Host $line -ForegroundColor Green }
default { Write-Host $line }
}
try { Add-Content -Path $LogFile -Value $line -Encoding UTF8 } catch { }
}
function Test-DestinationWritable {
&lt;#
Verifica che $Path esista (creandola se possibile) e sia scrivibile,
scrivendo e rimuovendo un piccolo file di prova. Funziona sia su
percorsi locali sia su UNC.
#&gt;
param([Parameter(Mandatory = $true)][string]$Path)
if (-not (Test-Path -Path $Path)) {
Write-Log "La destinazione '$Path' non esiste: provo a crearla..." -Level WARN
New-Item -Path $Path -ItemType Directory -Force -ErrorAction Stop | Out-Null
}
$probeFile = Join-Path $Path (".write_test_$([guid]::NewGuid().ToString('N')).tmp")
try {
[IO.File]::WriteAllText($probeFile, "test")
Remove-Item -Path $probeFile -Force -ErrorAction SilentlyContinue
}
catch {
throw "Impossibile scrivere in '$Path': $($_.Exception.Message). Verifica i permessi sulla share o usa -ShareCredential."
}
}
function Wait-ForGuestShutdown {
param(
[Parameter(Mandatory = $true)]$VM,
[Parameter(Mandatory = $true)][int]$TimeoutSec
)
$elapsed = 0
while ($elapsed -lt $TimeoutSec) {
Start-Sleep -Seconds 5
$elapsed += 5
$current = Get-VM -Id $VM.Id
if ($current.PowerState -eq 'PoweredOff') { return $true }
}
return $false
}
function Get-InventoryFolderPath {
&lt;#
Ricostruisce il percorso di inventory della VM (Datacenter e catena
di cartelle) necessario per il locator vi:// di ovftool, risalendo i
MoRef dei folder padre fino alla cartella "vm" radice del datacenter.
#&gt;
param([Parameter(Mandatory = $true)]$VM)
$dc = Get-Datacenter -VM $VM -ErrorAction Stop
$vmFolderMoRefValue = $dc.ExtensionData.VmFolder.Value
$pathParts = [System.Collections.Generic.List[string]]::new()
$currentMoRef = $VM.ExtensionData.Parent
$guard = 0
while ($currentMoRef -and $currentMoRef.Value -ne $vmFolderMoRefValue -and $guard -lt 50) {
$folderView = Get-View -Id $currentMoRef -Property Name, Parent -ErrorAction Stop
$pathParts.Insert(0, $folderView.Name)
$currentMoRef = $folderView.Parent
$guard++
}
return [PSCustomObject]@{
Datacenter = $dc.Name
FolderPath = ($pathParts -join '/')
}
}
function Resolve-OvfToolPath {
&lt;#
Individua ovftool.exe: usa il percorso fornito se valido, altrimenti
prova le posizioni di installazione standard, altrimenti cerca nel PATH.
#&gt;
param([Parameter(Mandatory = $false)][string]$PreferredPath)
if ($PreferredPath -and (Test-Path -Path $PreferredPath -PathType Leaf)) {
return $PreferredPath
}
$candidates = @()
if ($env:ProgramFiles) { $candidates += Join-Path $env:ProgramFiles 'VMware\VMware OVF Tool\ovftool.exe' }
if (${env:ProgramFiles(x86)}) { $candidates += Join-Path ${env:ProgramFiles(x86)} 'VMware\VMware OVF Tool\ovftool.exe' }
foreach ($candidate in $candidates) {
if (Test-Path -Path $candidate -PathType Leaf) { return $candidate }
}
$cmd = Get-Command -Name ovftool.exe -ErrorAction SilentlyContinue
if (-not $cmd) { $cmd = Get-Command -Name ovftool -ErrorAction SilentlyContinue }
if ($cmd) { return $cmd.Source }
throw "ovftool non trovato. Installa 'VMware OVF Tool' (Broadcom/VMware support portal) oppure specifica il percorso con -OvftoolPath."
}
function Ensure-PowerCLIModule {
&lt;#
Verifica che il modulo VMware.PowerCLI sia importato nella sessione
corrente; se manca del tutto sulla macchina, prova ad installarlo per
l'utente corrente da PowerShell Gallery. Senza questo controllo,
cmdlet come Set-PowerCLIConfiguration/Connect-VIServer falliscono con
"term ... is not recognized" su qualunque macchina dove PowerCLI non
sia già stato installato/importato in precedenza.
#&gt;
if (Get-Command -Name Connect-VIServer -ErrorAction SilentlyContinue) {
return # già importato in questa sessione
}
Write-Log "Modulo VMware.PowerCLI non ancora caricato in questa sessione: verifico se è installato..."
if (-not (Get-Module -ListAvailable -Name VMware.PowerCLI)) {
Write-Log "VMware.PowerCLI non risulta installato: provo l'installazione (scope CurrentUser)..." -Level WARN
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
if (-not (Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope CurrentUser | Out-Null
}
Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Force -AllowClobber -Confirm:$false -ErrorAction Stop
Write-Log "VMware.PowerCLI installato." -Level OK
}
catch {
throw "Impossibile installare VMware.PowerCLI automaticamente: $($_.Exception.Message). Installalo manualmente con: Install-Module VMware.PowerCLI -Scope CurrentUser"
}
}
Import-Module VMware.PowerCLI -ErrorAction Stop
Write-Log "Modulo VMware.PowerCLI importato." -Level OK
}
# ==============================================================================
# 1. Validazione destinazione (fail-fast prima di toccare vCenter)
# ==============================================================================
try {
Write-Log "==================== EXPORT VM: $VMName ===================="
Write-Log "Destinazione : $DestinationPath (formato $Format, exportFlags: $($ExportFlags -join ','))"
Write-Log "Utente corrente: $env:USERDOMAIN\$env:USERNAME su $env:COMPUTERNAME"
if ($ShareCredential) {
# Autentica una volta sul server della share; Windows mantiene la
# sessione autenticata per le successive operazioni dirette su UNC.
$uncRoot = ($DestinationPath -split '\\')[0..3] -join '\'
$MappedDriveName = "OvfExport_$([guid]::NewGuid().ToString('N').Substring(0,6))"
Write-Log "Autenticazione sulla share '$uncRoot' con le credenziali fornite..."
New-PSDrive -Name $MappedDriveName -PSProvider FileSystem -Root $uncRoot -Credential $ShareCredential -Scope Script -ErrorAction Stop | Out-Null
}
$extension = if ($Format -eq 'Ova') { '.ova' } else { '.ovf' }
if ($DestinationPath -match ([regex]::Escape($extension) + '$')) {
# E' stato passato direttamente un percorso file completo: lo si
# rispetta cosi' com'e', senza aggiungere una sottocartella.
$TargetFile = $DestinationPath
$TargetFolder = Split-Path -Parent $TargetFile
}
else {
# $DestinationPath e' una cartella "contenitore" (es. la share/cartella
# di progetto): dentro viene creata una sottocartella con il nome della
# VM, e dentro quella i file dell'export — stessa convenzione del
# client vSphere quando esporti in "Folder of files (OVF)".
$TargetFolder = Join-Path $DestinationPath $VMName
$TargetFile = Join-Path $TargetFolder "$VMName$extension"
}
Test-DestinationWritable -Path $TargetFolder
Write-Log "File di destinazione: $TargetFile" -Level OK
}
catch {
Write-Log "ERRORE sulla destinazione: $($_.Exception.Message)" -Level ERROR
if ($MappedDriveName) { Remove-PSDrive -Name $MappedDriveName -ErrorAction SilentlyContinue }
throw
}
# ==============================================================================
# 2. Connessione a vCenter (PowerCLI: lookup VM, power state, inventory path)
# ==============================================================================
try {
Ensure-PowerCLIModule
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -ParticipateInCeip $false -Confirm:$false | Out-Null
}
catch {
Write-Log "ERRORE preparazione PowerCLI: $($_.Exception.Message)" -Level ERROR
if ($MappedDriveName) { Remove-PSDrive -Name $MappedDriveName -ErrorAction SilentlyContinue }
exit 1
}
try {
Write-Log "Tentativo di connessione a '$vCenterServer' con l'utente Windows corrente ($CurrentUserForAuth) via SSO/SSPI..."
try {
$global:VIConnection = Connect-VIServer -Server $vCenterServer -SspiAuthentication $true -ErrorAction Stop
Write-Log "Connesso a $vCenterServer come $($global:VIConnection.User) (SSO)" -Level OK
}
catch {
Write-Log "Autenticazione SSO/SSPI non disponibile ($($_.Exception.Message)): il vCenter probabilmente non ha 'Windows Session Authentication' abilitata." -Level WARN
Write-Log "Fallback: prompt credenziali (precompilato con l'utente corrente $CurrentUserForAuth) — verranno riusate anche per ovftool più avanti, senza richiederle una seconda volta." -Level WARN
$SharedCredential = Get-Credential -UserName $CurrentUserForAuth -Message "Credenziali per $vCenterServer"
$global:VIConnection = Connect-VIServer -Server $vCenterServer -Credential $SharedCredential -ErrorAction Stop
Write-Log "Connesso a $vCenterServer come $($global:VIConnection.User)" -Level OK
}
}
catch {
Write-Log "ERRORE connessione a $vCenterServer : $($_.Exception.Message)" -Level ERROR
if ($MappedDriveName) { Remove-PSDrive -Name $MappedDriveName -ErrorAction SilentlyContinue }
exit 1
}
try {
# ==========================================================================
# 3. Individuazione VM
# ==========================================================================
$matchingVMs = @(Get-VM -Name $VMName -ErrorAction Stop)
if ($matchingVMs.Count -eq 0) {
throw "Nessuna VM trovata con nome '$VMName'."
}
if ($matchingVMs.Count -gt 1) {
throw "Trovate $($matchingVMs.Count) VM che corrispondono a '$VMName': specifica un nome univoco. ($(($matchingVMs.Name) -join ', '))"
}
$vm = $matchingVMs[0]
Write-Log "VM trovata: $($vm.Name) — Stato: $($vm.PowerState) — Host: $($vm.VMHost.Name)" -Level OK
$vmWasPoweredOn = ($vm.PowerState -eq 'PoweredOn')
# ==========================================================================
# 4. Spegnimento opzionale per consistenza dell'export
# ==========================================================================
if ($vmWasPoweredOn) {
if ($PowerOffFirst) {
if ($PSCmdlet.ShouldProcess($vm.Name, "Spegnimento (guest shutdown, fallback Stop-VM) prima dell'export")) {
Write-Log "Spegnimento della VM in corso (shutdown del guest OS)..." -Level WARN
$shutdownOk = $false
try {
Shutdown-VMGuest -VM $vm -Confirm:$false -ErrorAction Stop | Out-Null
$shutdownOk = Wait-ForGuestShutdown -VM $vm -TimeoutSec $GuestShutdownTimeoutSec
}
catch {
Write-Log "Shutdown del guest OS non disponibile (VMware Tools assenti/non attivi): $($_.Exception.Message)" -Level WARN
}
if (-not $shutdownOk) {
Write-Log "Guest shutdown non completato entro $GuestShutdownTimeoutSec secondi: eseguo Stop-VM (power off forzato)." -Level WARN
Stop-VM -VM $vm -Confirm:$false -ErrorAction Stop | Out-Null
}
$vm = Get-VM -Id $vm.Id
Write-Log "VM spenta. Stato attuale: $($vm.PowerState)" -Level OK
}
}
else {
Write-Log "La VM è ACCESA e verrà esportata 'a caldo'." -Level WARN
Write-Log "Per un export garantito consistente usa -PowerOffFirst." -Level WARN
}
}
else {
Write-Log "La VM è già spenta: export consistente senza bisogno di ulteriori azioni." -Level OK
}
# ==========================================================================
# 5. Export OVF/OVA tramite ovftool (unico modo per includere BIOS UUID,
# MAC addresses ed extra configuration — Export-VApp non lo supporta)
# ==========================================================================
if ($PSCmdlet.ShouldProcess("$($vm.Name) -&gt; $TargetFile", "Export via ovftool (exportFlags: $($ExportFlags -join ','))")) {
$ovftoolExe = Resolve-OvfToolPath -PreferredPath $OvftoolPath
Write-Log "ovftool: $ovftoolExe"
# ovftool, a differenza di PowerCLI, non ha un equivalente di
# -SspiAuthentication: non esiste modo di fargli riusare in automatico
# e senza password la sessione Windows corrente. Se pero' e' già
# stata raccolta una credenziale durante il fallback della
# connessione PowerCLI (SSPI non disponibile su questo vCenter), la
# riusiamo qui invece di chiederla una seconda volta.
if ($SharedCredential) {
Write-Log "ovftool riusa la credenziale già inserita per la connessione PowerCLI (nessun secondo prompt)."
$ovfUser = $SharedCredential.UserName
$plainPassword = $SharedCredential.GetNetworkCredential().Password
}
else {
Write-Log "ovftool userà l'utente corrente ($CurrentUserForAuth); serve solo la password (ovftool non supporta il login integrato di Windows)."
$ovfUser = $CurrentUserForAuth
$securePassword = Read-Host -Prompt "Password vCenter per $CurrentUserForAuth (ovftool)" -AsSecureString
$plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword))
}
$inv = Get-InventoryFolderPath -VM $vm
$locatorPath = if ($inv.FolderPath) { "$($inv.Datacenter)/vm/$($inv.FolderPath)/$($vm.Name)" } else { "$($inv.Datacenter)/vm/$($vm.Name)" }
Write-Log "Percorso inventory VM: $locatorPath"
# Percent-encoding di ogni segmento del path e delle credenziali
# (necessario per caratteri come spazi, backslash nel dominio, @ nella
# UPN o nella password, dentro il locator vi://user:pass@host/path).
$encodedLocatorPath = (($locatorPath -split '/') | ForEach-Object { [uri]::EscapeDataString($_) }) -join '/'
$encodedUser = [uri]::EscapeDataString($ovfUser)
$encodedPass = [uri]::EscapeDataString($plainPassword)
$sourceUri = "vi://{0}:{1}@{2}/{3}" -f $encodedUser, $encodedPass, $vCenterServer, $encodedLocatorPath
$plainPassword = $null
$ovftoolArgs = [System.Collections.Generic.List[string]]::new()
$ovftoolArgs.Add("--noSSLVerify")
$ovftoolArgs.Add("--exportFlags=$($ExportFlags -join ',')")
if ($Force) { $ovftoolArgs.Add("--overwrite") }
$ovftoolArgs.Add($sourceUri)
$ovftoolArgs.Add($TargetFile)
Write-Log "Avvio ovftool (exportFlags: $($ExportFlags -join ', '))..."
$ovftoolOutput = &amp; $ovftoolExe @ovftoolArgs 2&gt;&amp;1
$ovftoolExitCode = $LASTEXITCODE
$ovftoolOutput | ForEach-Object { Write-Log " [ovftool] $_" }
if ($ovftoolExitCode -ne 0) {
throw "ovftool ha restituito il codice di uscita $ovftoolExitCode. Vedi l'output sopra e il file di log '$LogFile' per il dettaglio."
}
Write-Log "Export completato con successo (BIOS UUID, MAC addresses ed extra configuration inclusi)." -Level OK
if (Test-Path -Path $TargetFile -PathType Leaf) {
$baseName = [IO.Path]::GetFileNameWithoutExtension($TargetFile)
$siblingFiles = @(Get-ChildItem -Path $TargetFolder -ErrorAction SilentlyContinue | Where-Object { $_.BaseName -eq $baseName })
Write-Log "File presenti a destinazione: $($siblingFiles.Count)" -Level OK
$siblingFiles | ForEach-Object { Write-Log " - $($_.Name) ($([math]::Round($_.Length/1GB,2)) GB)" }
}
else {
Write-Log "Impossibile confermare la presenza del file '$TargetFile' — verifica manualmente." -Level WARN
}
}
else {
Write-Log "Export saltato (-WhatIf): nessuna modifica effettuata." -Level WARN
}
# ==========================================================================
# 6. Riaccensione opzionale
# ==========================================================================
if ($PowerOffFirst -and $PowerOnAfter -and $vmWasPoweredOn) {
if ($PSCmdlet.ShouldProcess($vm.Name, "Riaccensione dopo l'export")) {
Write-Log "Riaccensione della VM..."
Start-VM -VM $vm -Confirm:$false -ErrorAction Stop | Out-Null
Write-Log "VM riaccesa." -Level OK
}
}
Write-Log "==================== EXPORT COMPLETATO ====================" -Level OK
}
catch {
Write-Log "ERRORE FATALE: $($_.Exception.Message)" -Level ERROR
Write-Log ($_.ScriptStackTrace) -Level ERROR
throw
}
finally {
if ($global:VIConnection) {
Disconnect-VIServer -Server $global:VIConnection -Confirm:$false -ErrorAction SilentlyContinue
Write-Log "Disconnesso da $vCenterServer" -Level OK
}
if ($MappedDriveName) {
Remove-PSDrive -Name $MappedDriveName -ErrorAction SilentlyContinue
}
}</pre><p>&nbsp;</p>
<h3><strong>COME SI USA</strong></h3>
<p>Modalità completamente interattiva lo script chiede tutto:</p><pre class="urvanov-syntax-highlighter-plain-tag">.\Export-VM-OVF.ps1</pre><p>Mostra il menu di scelta del vCenter, chiede il nome della VM, e poi procede con l&#8217;export &#8220;a caldo&#8221; nella cartella di destinazione di default.</p>
<p>Esecuzione non interattiva, con spegnimento pre-export, riaccensione automatica al termine e sovrascrittura di eventuali file già presenti:</p><pre class="urvanov-syntax-highlighter-plain-tag">.\Export-VM-OVF.ps1 -VCenterChoice 2 -VMName "SRV-PROD-SYNC-01" -PowerOffFirst -PowerOnAfter -Force</pre><p>In questo caso l&#8217;unico prompt possibile è quello per le credenziali, e solo se necessario (SSO/SSPI non disponibile sul vCenter, oppure per ovftool come spiegato sopra).</p>
<p>Simulazione senza toccare nulla, utile prima di lanciare l&#8217;export su una VM di produzione:</p><pre class="urvanov-syntax-highlighter-plain-tag">.\Export-VM-OVF.ps1 -VCenterChoice 1 -VMName "SRV-PROD-SYNC-01" -PowerOffFirst -WhatIf</pre><p>Export in formato OVA (un unico file) invece della cartella OVF+VMDK+MF:</p><pre class="urvanov-syntax-highlighter-plain-tag">.\Export-VM-OVF.ps1 -VCenterChoice 3 -VMName "SRV-PROD-SYNC-01" -Format Ova -DestinationPath "D:\Export"</pre><p>&nbsp;</p>
<h3></h3>
<h3><strong>OUTPUT ATTESO</strong></h3>
<p>Durante l&#8217;esecuzione, lo script produce un log a video (e su file, con lo stesso nome timestampato Export-VM-OVF_yyyyMMdd_HHmmss.log) simile a questo:</p>
<p>[2026-08-30 10:12:03] [INFO] ==================== EXPORT VM: SRV-PROD-SYNC-01 ====================<br />
[2026-08-30 10:12:03] [INFO] Destinazione : \\fileserver01.azienda.local\export\ProgettoX (formato Ovf, exportFlags: mac,uuid,extraconfig)<br />
[2026-08-30 10:12:03] [OK] File di destinazione: \\fileserver01.azienda.local\export\ProgettoX\SRV-PROD-SYNC-01\SRV-PROD-SYNC-01.ovf<br />
[2026-08-30 10:12:05] [OK] Connesso a vcenter02.azienda.local come AZIENDA\mario.rossi (SSO)<br />
[2026-08-30 10:12:06] [OK] VM trovata: SRV-PROD-SYNC-01 — Stato: PoweredOn — Host: esxi-host-03.azienda.local<br />
[2026-08-30 10:12:06] [WARN] La VM è ACCESA e verrà esportata &#8216;a caldo&#8217;.<br />
[2026-08-30 10:12:07] [INFO] Avvio ovftool (exportFlags: mac, uuid, extraconfig)&#8230;<br />
[2026-08-30 10:14:52] [OK] Export completato con successo (BIOS UUID, MAC addresses ed extra configuration inclusi).<br />
[2026-08-30 10:14:52] [OK] File presenti a destinazione: 3<br />
[2026-08-30 10:14:52] [INFO] &#8211; SRV-PROD-SYNC-01.ovf (0 GB)<br />
[2026-08-30 10:14:52] [INFO] &#8211; SRV-PROD-SYNC-01.mf (0 GB)<br />
[2026-08-30 10:14:52] [INFO] &#8211; SRV-PROD-SYNC-01-disk1.vmdk (24.13 GB)<br />
[2026-08-30 10:14:53] [OK] Disconnesso da vcenter02.azienda.local<br />
[2026-08-30 10:14:53] [OK] ==================== EXPORT COMPLETATO ====================</p>
<p>Nella cartella di destinazione si troverà quindi il file descrittore .ovf, il manifest .mf con i checksum, e uno o più .vmdk con i dischi virtuali (oppure un unico .ova se è stato usato -Format Ova) — pronti per essere re-importati altrove mantenendo BIOS UUID, MAC address e configurazione extra della VM originale.</p>
<p>&nbsp;</p>
<h3><strong>CONSIDERAZIONI FINALI</strong></h3>
<p>Il punto centrale dello script è la combinazione di due strumenti che da soli non basterebbero: PowerCLI per parlare con vCenter in modo &#8220;nativo&#8221; (lookup della VM, stato di accensione, percorso di inventory) e ovftool per l&#8217;export vero e proprio, perché è l&#8217;unico dei due a esporre le opzioni avanzate del formato OVF.</p>
<p>Vale la pena ricordare che ovftool va installato separatamente (non arriva con PowerCLI) e che, autenticazione SSO a parte, resta comunque legato a un flusso utente/password classico  un limite intrinseco dello strumento di cui è bene tenere conto quando si progettano automazioni di questo tipo su più vCenter.</p>
<p>&nbsp;</p>

<div class="wp-block-button">
<a  data-e-Disable-Page-Transition="true" class="dlm-download-link dlm-download-button wp-block-button__link wp-element-button" title="Versione v.1" href="https://www.raffaelechiatto.com/download/1124858/?tmstv=1789638221" rel="nofollow" id="download-link-1124858" data-redirect="false" >
	Download &ldquo;Export-VM-OVF.zip&rdquo;	<span class="dlm-button-meta">Export-VM-OVF.zip		&ndash; Scaricato 343 volte		&ndash; 7,83 KB</span>
</a>
</div>

]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/esportazione-automatizzata-di-una-vm-in-ovf-ova-da-vcenter-con-powercli-e-ovf-tool/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure length="8026" type="application/zip" url="https://www.raffaelechiatto.com/download/1124858/?tmstv=1788767788"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>&amp;#160; Quando si amministrano ambienti virtualizzati su VMware vSphere, capita spesso di dover esportare una VM come pacchetto OVF/OVA — ad esempio per un backup &amp;#8220;a freddo&amp;#8221;, per spostarla su un altro sito, o per consegnarla a un fornitore/partner come immagine autonoma. Dal client vSphere l&amp;#8217;operazione è semplice: tasto destro sulla VM, &amp;#8220;Export System Image&amp;#8221;, [&amp;#8230;]</itunes:subtitle><itunes:summary>&amp;#160; Quando si amministrano ambienti virtualizzati su VMware vSphere, capita spesso di dover esportare una VM come pacchetto OVF/OVA — ad esempio per un backup &amp;#8220;a freddo&amp;#8221;, per spostarla su un altro sito, o per consegnarla a un fornitore/partner come immagine autonoma. Dal client vSphere l&amp;#8217;operazione è semplice: tasto destro sulla VM, &amp;#8220;Export System Image&amp;#8221;, [&amp;#8230;]</itunes:summary><itunes:keywords>Virtualizzazione, VmWare, ova, ovf, ovftool, PowerCLI, powershell</itunes:keywords></item>
		<item>
		<title>vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py</title>
		<link>https://www.raffaelechiatto.com/vcenter-machine-ssl-certificate-in-scadenza-guida-passo-passo-con-vcert-py/</link>
					<comments>https://www.raffaelechiatto.com/vcenter-machine-ssl-certificate-in-scadenza-guida-passo-passo-con-vcert-py/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Thu, 03 Sep 2026 06:42:17 +0000</pubDate>
				<category><![CDATA[VmWare]]></category>
		<category><![CDATA[Machine_SSL_Certificate]]></category>
		<category><![CDATA[vcenter]]></category>
		<category><![CDATA[vCertpy]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124517</guid>

					<description><![CDATA[&#160; Se gestisci un ambiente VMware vSphere, prima o poi ti capiterà di ricevere questo alert nei log o dalla vSphere Client: MACHINE_SSL_CERT certificate in VECS is about to expire Un certificato Machine SSL scaduto non è un dettaglio da poco: quando succede, vCenter smette di comunicare correttamente con vLCM, con gli host ESXi e [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="679" height="89" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 103" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Se gestisci un ambiente VMware vSphere, prima o poi ti capiterà di ricevere questo alert nei log o dalla vSphere Client:</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124520 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_01-1024x489.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="489" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 104" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_01-980x468.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_01-480x229.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p><strong>MACHINE_SSL_CERT certificate in VECS is about to expire</strong></p>
<p>Un certificato Machine SSL scaduto non è un dettaglio da poco: quando succede, vCenter smette di comunicare correttamente con vLCM, con gli host ESXi e con qualsiasi client che verifichi il certificato TLS, con errori tipo x509: certificate has expired or is not yet valid che si propagano a raffica nei log di vlcm.log.</p>
<p>Fortunatamente Broadcom mette a disposizione vCert.py, un tool ufficiale a menu che permette di controllare lo stato di tutti i certificati di vCenter (Machine SSL, Solution Users, STS signing, VMCA, e altri) e di sostituirli senza dover ricorrere a manipolazioni manuali di VECS o OpenSSL a mano.</p>
<p>In questa guida vediamo passo passo come:</p>
<p>scaricare e caricare lo script sull&#8217;appliance vCenter,<br />
verificare lo stato attuale dei certificati,<br />
rinnovare il Machine SSL certificate (sia con firma VMCA che con CA custom),<br />
aggiornare gli SSL Trust Anchors in caso di Enhanced Linked Mode,<br />
riavviare i servizi correttamente a fine operazione.</p>
<p>&nbsp;</p>
<h3><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> PRIMA DI INIZIARE</strong></h3>
<p>Verifica se il tuo vCenter è 8.0 U3h+ con VMCA in modalità vmca (default): in quel caso il certificato si rinnova automaticamente 5 giorni prima della scadenza. Controlla comunque la data di scadenza reale prima di agire.</p>
<p>Se usi un certificato custom (CA interna, es. la tua AD CS, o Let&#8217;s Encrypt), il rinnovo automatico non si applica: serve intervento manuale.</p>
<p>Obbligatorio: crea uno snapshot (o backup VAMI) della VM di vCenter prima di toccare qualsiasi certificato. Se sei in Enhanced Linked Mode, snapshot su tutti i nodi PSC/vCenter del dominio SSO.</p>
<p>&nbsp;</p>
<h3><strong>SCARICARE LO SCRIPT</strong></h3>
<p>Vai sulla pagina del <a href="https://knowledge.broadcom.com/external/article/385107/vcert-scripted-vcenter-expired-certific.html" target="_blank" rel="noopener"><strong>KB385107</strong></a></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124521 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_02-1024x493.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="493" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 105" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_02-980x471.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_02-480x231.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Andare al fondo della pagina e scaricare l&#8217;allegato <strong>vCert-6.1.2-20260713.zip</strong> (verificare hash se vuoi: MD5 ce8aea7d342e4ffa208769798aba56e3)</p>
<p>&nbsp;</p>
<h3><strong>CARICARE LO SCRIPT SUL VCENTER</strong></h3>
<p>Caricare lo zip sull&#8217;appliance vCenter eseguendo i passaggi elencati di seguito</p>
<p>Aprire dal proprio PC un terminale Powershell</p>
<p>Collegarsi al Vcenter in SSH con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">ssh root@&lt;vcenter-fqdn-o-IP&gt;</pre><p>Abilitare la shell digitando il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">shell</pre><p>Questo ti porta temporaneamente in bash. Poi per rendere bash la shell di default di root (così anche scp funziona senza intoppi), lancia da dentro la bash il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">chsh -s /bin/bash root</pre><p>Quindi copiare il file con il seguente comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">scp -O C:\temp\vCert-6.1.2-20260713.zip root@&lt;vcenter-fqdn-o-IP&gt;:/root/</pre><p><strong>NOTA BENE</strong>: nel mio caso ho il file .zip all&#8217;interno della cartella C:\temp</p>
<p>Oppure è possibile copiare il file tramite l&#8217;upload da VAMI/vSphere Client se preferisci non aprire SSH dall&#8217;esterno.</p>
<p>&nbsp;</p>
<h3><strong>ESTRARRE ED ESEGUIRE LO ZIP</strong></h3>
<p>Connettersi via SSH all&#8217;appliance vCenter come root ed eseguire i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">unzip -q vCert-6.1.2-20260713.zip
cd vCert-6.1.2-20260713
chmod +x vCert.py
./vCert.py</pre><p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124522 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_03-1024x583.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="583" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 106" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_03-980x558.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_03-480x273.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Confermare l&#8217;avviso iniziale<strong> (y)</strong> solo dopo aver verificato di avere lo snapshot pronto.</p>
<p><strong>NOTA BENE</strong>: Lo script logga in <strong>/var/log/vmware/vCert/vCert.log</strong> e crea una working dir in <strong>/root/vCert-master/YYYYMMDD/</strong> (backup dei certificati inclusi).</p>
<p>&nbsp;</p>
<h3><strong>VERIFICARE LO STATO ATTUALE DEI CERTIFICATI</strong></h3>
<p>Se è andato tutto a buon fine dovremmo visualizzare una schermata come l&#8217;immagine sottostante</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_04.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124523 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_04-1024x585.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="585" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 107" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_04-980x560.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_04-480x274.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>1. Check current certificate status</strong></p>
<p>Ci dice se il Machine SSL è scaduto/in scadenza entro 30gg, se il PNID è presente nel SAN, se la chain è completa, ecc.</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_05.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124524 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_05-1024x542.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="542" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 108" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_05-980x519.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_05-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Dovremmo vedere il certificato Machine SSL in scadenza come mostra l&#8217;imamgine sovrastante</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_06.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124526 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_06-1024x544.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="544" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 109" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_06-980x520.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_06-480x255.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Poi controllare i dettagli specifici selezionare l&#8217;opzione <strong>2. View certificate info</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_07.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124527 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_07-1024x525.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="525" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 110" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_07-980x502.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_07-480x246.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>1. Machine SSL certificate</strong> quindi annotare scadenza, subject e fingerprint attuali.</p>
<p>&nbsp;</p>
<h3><strong>SOSTITUZIONE DEL MACHINE SSL CERTIFICATE</strong></h3>
<p>Dal menu principale</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_08.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124528 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_08-1024x541.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="541" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 111" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_08-980x518.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_08-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>3. Manage certificates</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_09.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124529 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_09-1024x541.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="541" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 112" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_09-980x518.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_09-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>1. Machine SSL certificate</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124530 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_10-1024x541.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="541" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 113" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_10-980x518.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_10-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Verrà chiesto il tipo di certificato:</p>
<p>1. <strong>Replace Machine SSL certificate with a VMCA-signed certificate</strong>: Rinnovo rapido e ok se non serve trust esterno</p>
<p>2. <strong>Replace Machine SSL certificate with a custom CA-signed certificate</strong>: Se usi la tua AD CS interna o altra CA — lo script può generare CSR + chiave, oppure importare un certificato+chiave già firmati</p>
<p><strong>ATTENZIONE</strong>: Se si sceglie custom CA-signed e la catena non è completa, lo script chiederà il file con la chain CA completa (vedi anche KB 316601 step 10 per i dettagli sulla chain).</p>
<p>&nbsp;</p>
<h3><strong>AGGIORNAMENTO DEL SSL TRUST ANCHORS (SOLO SE IN ENHANCED LINKED MODE)</strong></h3>
<p>Se hai più nodi vCenter/PSC nello stesso dominio SSO, dal menu principale:</p>
<p><strong>4. Manage SSL trust anchors → 2. Update SSL Trust Anchors</strong></p>
<p>Questo allinea gli altri nodi al nuovo certificato appena generato.</p>
<p>&nbsp;</p>
<h3><strong>RIAVVIO DEI SERVIZI</strong></h3>
<p>Dal menu principale</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124532 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_11-1024x541.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="541" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 114" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_11-980x517.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_11-480x253.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>8. Restart services</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124533 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_12-1024x542.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="542" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 115" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_12-980x519.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_12-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>1. Restart all VMware services</strong></p>
<p>(oppure 2 per riavviare solo un servizio specifico, se lo script/log ti indica quale)</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_13.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124534 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_13-1024x543.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="543" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 116" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_13-980x520.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_13-480x255.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è andato tutto a buon fine dovremo visualizzare una schermata come mostrato nell&#8217;immagine sovrastante</p>
<p>&nbsp;</p>
<h3><strong>VERIFICA FINALE</strong></h3>
<p>Dal menu principale</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_14.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124535 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_14-1024x542.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="542" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 117" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_14-980x519.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_14-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Selezionare l&#8217;opzione <strong>1. Check current certificate status</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_15.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124536 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_15-1024x541.png" alt="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py - Raffaele Chiatto" width="1024" height="541" title="vCenter Machine SSL Certificate in scadenza: guida passo-passo con vCert.py 118" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_15-980x518.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/renew_ssl_vcsa_15-480x254.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è tutto OK dovremmo visualizzare una schermata come mostrato nell&#8217;immagine sovrastante</p>
<p>E&#8217; possibile generare un report completo con il seguente comando:</p>
<p><strong>9. Generate certificate report</strong></p>
<p>e verrà salvato in <strong>/var/log/vmware/vCert/.</strong></p>
<p>&nbsp;</p>
<h3><strong>CONSIDERAZIONI FINALI</strong></h3>
<p>La gestione dei certificati in vCenter è uno di quegli aspetti dell&#8217;infrastruttura VMware che si tende a dare per scontato finché non arriva l&#8217;alert di scadenza e a quel punto, se non si è preparati, il rischio di impatto su vLCM, backup (Veeam), integrazioni di terze parti e comunicazione con gli host ESXi è concreto.</p>
<p>vCert.py semplifica enormemente questo processo rispetto alla gestione manuale via openssl e VECS CLI, ma resta comunque un&#8217;operazione delicata: non è un tool da lanciare &#8220;a scatola chiusa&#8221;. Alcuni punti da tenere sempre a mente:</p>
<p>Lo snapshot non è opzionale. Anche se la procedura guidata riduce il margine di errore, un problema nella sostituzione del Machine SSL può compromettere l&#8217;intera comunicazione di vCenter con l&#8217;ambiente. Uno snapshot pre-operazione è l&#8217;unica vera rete di sicurezza.</p>
<p>Verifica sempre il PNID prima di generare il certificato, non dopo. Come visto, un SAN incompleto (errore NO PNID) è uno degli errori più comuni e facilmente evitabili controllando vmafd-cli get-pnid prima di procedere.</p>
<p>In Enhanced Linked Mode, l&#8217;ordine conta. Aggiornare i trust anchor su tutti i nodi dopo la sostituzione evita disallineamenti tra i vCenter dello stesso dominio SSO, che possono generare errori di autenticazione intermittenti difficili da diagnosticare.</p>
<p>Pianifica una finestra di manutenzione, anche se l&#8217;operazione dura pochi minuti: il riavvio dei servizi VMware comporta una breve interruzione della gestione centralizzata (vSphere Client, API, integrazioni).</p>
<p>In ambienti multi-tenant o MSP come quelli che gestisco quotidianamente, vale la pena automatizzare un controllo periodico dello stato dei certificati (ad esempio con LibreNMS o uno script schedulato che lancia l&#8217;opzione 1 di vCert.py e notifica in caso di scadenza imminente), così da anticipare l&#8217;alert prima che diventi un&#8217;emergenza.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/vcenter-machine-ssl-certificate-in-scadenza-guida-passo-passo-con-vcert-py/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04</title>
		<link>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vikunja-su-ubuntu-server-26-04/</link>
					<comments>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vikunja-su-ubuntu-server-26-04/#respond</comments>
		
		<dc:creator><![CDATA[Raffaele Chiatto]]></dc:creator>
		<pubDate>Mon, 31 Aug 2026 07:23:30 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Vikunja]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[task]]></category>
		<category><![CDATA[to-do]]></category>
		<category><![CDATA[vikunja]]></category>
		<guid isPermaLink="false">https://www.raffaelechiatto.com/?p=1124484</guid>

					<description><![CDATA[&#160; Gestire attività, scadenze e progetti con strumenti cloud proprietari significa spesso rinunciare al controllo sui propri dati. Vikunja è un task manager open source, self-hosted, che offre liste, board Kanban, diagrammi di Gantt e sincronizzazione CalDAV senza dipendere da servizi di terze parti. Scritto in Go per il backend e Vue 3 per il [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="size-full wp-image-1091058 alignnone" src="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png" alt="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 - Raffaele Chiatto" width="679" height="89" title="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 123" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR.png 679w, https://www.raffaelechiatto.com/wp-content/uploads/2020/12/ADVANCED-BAR-480x63.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 679px, 100vw" /></p>
<p>&nbsp;</p>
<p>Gestire attività, scadenze e progetti con strumenti cloud proprietari significa spesso rinunciare al controllo sui propri dati.</p>
<p>Vikunja è un task manager open source, self-hosted, che offre liste, board Kanban, diagrammi di Gantt e sincronizzazione CalDAV senza dipendere da servizi di terze parti.</p>
<p>Scritto in Go per il backend e Vue 3 per il frontend, viene distribuito come immagine Docker unificata, il che semplifica notevolmente il deploy rispetto ad altre soluzioni self-hosted più pesanti.</p>
<p>In questa guida vedremo come installare Docker da zero su Ubuntu Server 26.04 e come configurare Vikunja con Docker Compose, database PostgreSQL incluso, fino al primo accesso e alla configurazione base del servizio.</p>
<p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI DOCKER</strong></h3>
<p>Rimuovere eventuali versioni precedenti/pacchetti in conflitto con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt remove docker docker-engine docker.io containerd runc</pre><p>Aggiornare i repository e installare i pacchetti necessari con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update
sudo apt install -y ca-certificates curl gnupg</pre><p>Aggiungere la chiave GPG ufficiale Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg</pre><p>Aggiungere il repository Docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</pre><p><strong>NOTA BENE</strong>: se Ubuntu 26.04 non ha ancora un repository dedicato su download.docker.com al momento dell&#8217;installazione usare il codename della release LTS precedente supportata (es. noble) al posto di $VERSION_CODENAME. Verifica su https://download.docker.com/linux/ubuntu/dists/ quali codename sono disponibili.</p>
<p>Installare Docker Engine, CLI, containerd e il plugin Compose con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</pre><p>Verificare l&#8217;installazione con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo docker run hello-world</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/</pre><p>Usare Docker senza sudo (Opzionale ma consigliato) con i seguenti comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo usermod -aG docker $USER
newgrp docker</pre><p>Verificare le versioni installare con i comandi:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker --version</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Docker version 29.7.2, build a7dcaa6</pre><p>Quindi eseguire il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose version</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">Docker Compose version v5.4.0</pre><p>&nbsp;</p>
<h3><strong>INSTALLAZIONE DI VIKUNJA</strong></h3>
<p>Questa configurazione esporrà Vikunja direttamente sulla porta 3456 dell&#8217;host raggiungibile via <strong>http://&lt;ip-del-server&gt;:3456.</strong></p>
<p>È la configurazione minima secondo la documentazione ufficiale, adatta per test o uso interno su rete LAN.</p>
<p>Creare le directory di progetto con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">mkdir -p ~/docker/vikunja/{files,db}

cd ~/docker/vikunja</pre><p>Impostare i permessi sulla cartella files con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo chown 1000 ./files</pre><p>Con Docker rootless i permessi funzionano diversamente: in quel caso imposta user: &#8220;0:0&#8221; sul servizio vikunja nel compose invece di fare il chown.</p>
<p>Generare un secret sicuro con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">openssl rand -hex 32</pre><p>Dovremmo visualizzare un output simile al seguente:</p><pre class="urvanov-syntax-highlighter-plain-tag">b5a7c0652de8fd878b51c2369a3abc6dc23098a38ccc01dac64b370056e2850f</pre><p>Copiare il secret perchè lo useremo più avanti in <strong>VIKUNJA_SERVICE_SECRET.</strong></p>
<p>Creare il file <strong>docker-compose.yml</strong> con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo nano docker-compose.yml</pre><p>quindi incollare all&#8217;interno del file il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: http://&lt;ip-del-server&gt;:3456
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: CAMBIA_QUESTA_PASSWORD
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_SECRET: "IL_SECRET_GENERATO_AL_PASSO_3"
ports:
- "3456:3456"
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:18
environment:
POSTGRES_PASSWORD: CAMBIA_QUESTA_PASSWORD
POSTGRES_USER: vikunja
POSTGRES_DB: vikunja
volumes:
- ./db:/var/lib/postgresql
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30s</pre><p>Salvare e chiudere il file YML</p>
<p><strong>ATTENZIONE:</strong></p>
<p>VIKUNJA_DATABASE_PASSWORD e POSTGRES_PASSWORD devono essere identiche.</p>
<p>VIKUNJA_SERVICE_PUBLICURL deve puntare all&#8217;IP/hostname e porta effettivamente raggiungibili dal browser: è l&#8217;URL che il frontend usa per contattare le API.<br />
Se cambi porta o IP dopo, aggiorna anche questo valore.</p>
<p><strong>NOTA BENE</strong>: Senza reverse proxy non hai TLS: il traffico resta in HTTP semplice. Va bene per una LAN interna, ma non per esporlo su internet.</p>
<p>Avviare lo stack con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose up -d</pre><p>Dovremmo visualizzare il seguente output:</p><pre class="urvanov-syntax-highlighter-plain-tag">[+] up 25/25
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image vikunja/vikunja Pulled 7.0s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image postgres:18 Pulled 9.6s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Network vikunja_default Created 0.0s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container vikunja-db-1 Healthy 12.9s
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container vikunja-vikunja-1 Started</pre><p>Controllare i log con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose logs -f vikunja</pre><p>Aspetta il messaggio che confermi che le migration del database siano completate e che il server sia in ascolto.</p>
<p>&nbsp;</p>
<h3><strong>ACCESSO DI VIKUNJA DA WEB GUI</strong></h3>
<p>Aprire il browser e richiamare il seguente link:</p>
<p><strong>http://&lt;ip-del-server&gt;:3456</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-01.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124488 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-01-1024x401.png" alt="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 - Raffaele Chiatto" width="1024" height="401" title="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 124" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-01-980x384.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-01-480x188.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Cliccare su <strong>Crea Account</strong> per creare il primo account</p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-02.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124489 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-02-1024x404.png" alt="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 - Raffaele Chiatto" width="1024" height="404" title="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 125" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-02-980x387.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-02-480x189.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Inserire tutte le info richieste quindi cliccare su <strong>Crea Account</strong></p>
<p><a href="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1124490 size-large" src="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-03-1024x402.png" alt="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 - Raffaele Chiatto" width="1024" height="402" title="Installazione e Configurazione Base di Vikunja su Ubuntu Server 26.04 126" srcset="https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-03-980x385.png 980w, https://www.raffaelechiatto.com/wp-content/uploads/2026/08/install-vikunja-ubuntu-03-480x189.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></a></p>
<p>Se è andato tutto a buon fine dovremmo visualizzare la <strong>Dashboard di Vikunja</strong> come mostrato nell&#8217;immagine sovrastante</p>
<p>Disabilitare la registrazione pubblica dopo aver creato gli utenti necessari aggiungendo al servizio vikunja:</p><pre class="urvanov-syntax-highlighter-plain-tag">environment:
VIKUNJA_SERVICE_ENABLEREGISTRATION: "false"</pre><p>Quindi riavviare docker con il comando:</p><pre class="urvanov-syntax-highlighter-plain-tag">docker compose up -d</pre><p>&nbsp;</p>
<h3><strong>COMANDI UTILI</strong></h3>
<p>Di seguito i comandi utili:</p>
<ul>
<li>docker compose down # ferma lo stack</li>
<li>docker compose pull # scarica l&#8217;ultima immagine</li>
<li>docker compose up -d # riavvia con l&#8217;immagine aggiornata</li>
<li>docker compose logs -f # segue i log di tutti i servizi</li>
</ul>
<h3></h3>
<h3><strong>PRO E CONTRO DI VIKUNJA</strong></h3>
<p>Ecco un elenco di pro e contro di Vikunja, pensato in chiave self-hosting.</p>
<h4><strong>PRO</strong></h4>
<ul>
<li>Open source e completamente gratuito da self-hostare — nessun limite su progetti, task o funzionalità nella versione self-hosted, a differenza di molti concorrenti che bloccano funzioni dietro un piano a pagamento</li>
<li>Deploy semplificato — l&#8217;immagine Docker unificata (frontend + backend in un solo container) rende lo stack molto più leggero rispetto ad altre soluzioni PM self-hosted</li>
<li>Viste multiple — lista classica, Kanban, tabella e Gantt nello stesso progetto, così ognuno usa il layout che preferisce</li>
<li>Quick Add Magic — sintassi rapida per inserire scadenze, etichette e assegnatari direttamente durante la digitazione del task, senza passaggi aggiuntivi</li>
<li>Collaborazione solida — condivisione di progetti/sottoprogetti con singoli o intere squadre, assegnazione task chiaraStrong collaboration features for teams</li>
<li>Importer integrati — es. da Todoist, utile in fase di migrazione da tool proprietariVikunja.</li>
<li>CalDAV nativo — sincronizzazione con client calendario esterni, cosa che molti tool PM self-hosted non offrono</li>
<li>Reminders senza paywall — anche nella versione gratuita/self-hosted, a differenza di alternative come Todoist che le riservano al piano ProVikunja works.</li>
</ul>
<h4></h4>
<h4><strong>CONTRO</strong></h4>
<ul>
<li>Richiede competenze tecniche per il self-hosting — setup e manutenzione (Docker, database, permessi, reverse proxy) non sono alla portata di un utente non tecnico</li>
<li>Gestione utenti da riga di comando — nella versione self-hosted alcune operazioni di amministrazione utenti passano da CLI, non da interfaccia grafica (automatizzabile, ma è un gradino in più)</li>
<li>SMTP da configurare fin da subito — reminder e reset password non funzionano senza un mailer configurato, e aggiungerlo dopo richiede un restart dello stack meglio pianificarlo al primo deploy</li>
<li>Nessun account admin predefinito — il primo utente registrato è un utente normale, va gestito manualmente chi ha ruoli elevati</li>
<li>App native ancora in roadmap — al momento è una PWA, non un&#8217;app nativa mobile/desktop</li>
<li>Meno adatto a documentazione mista stile Notion — è un tool di task/project management puro, non un workspace con documenti ricchi integrati</li>
<li>Community storage limitato solo su Vikunja Cloud — se non fai self-hosting e usi il piano cloud gratuito/personale, gli allegati hanno limiti di spazio</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.raffaelechiatto.com/installazione-e-configurazione-base-di-vikunja-su-ubuntu-server-26-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>