{"id":1885,"date":"2016-06-13T14:33:18","date_gmt":"2016-06-13T12:33:18","guid":{"rendered":"https:\/\/www.giannifavilli.it\/blog\/?p=1885"},"modified":"2022-02-22T16:11:24","modified_gmt":"2022-02-22T15:11:24","slug":"ssh-scp-no-password","status":"publish","type":"post","link":"https:\/\/www.giannifavilli.it\/blog\/ssh-scp-no-password\/","title":{"rendered":"SSH e SCP senza richiesta di password"},"content":{"rendered":"<p>Questa \u00e8 una guida per la creazione di una connessione sicura in SSH o SCP senza obbligatoriamente utilizzare una password da scrivere nel terminale ma al suo posto utilizzando delle chiavi criptografate. Oltre ad una maggiore sicurezza questa soluzione offre la possibilit\u00e0 di lanciare degli script o procedure remote tra pi\u00f9 server in maniera del tutto sicura e senza necessariamente che l&#8217;utente debba intervenire inserendo la password manualmente o scrivendo un <span style=\"color: #3366ff;\"><em>echo<\/em> <\/span>con la password in chiaro nello script.<\/p>\n<p>La logica \u00e8 la seguente, la connessione avviane tra due terminali, nella maniera <em>tradizionale<\/em> l&#8217;utente ha l&#8217;obbligo di autenticarsi puntando lo username e inserendo la\u00a0password dopo la connessione, mentre nella maniera delle <em>chiavi <\/em>, passatemi il termine,<em>\u00a0<\/em>l&#8217;utente non deve fare niente dopo l&#8217;avvenuta connessione senza rinunciare alla sicurezza. Utilizzando le chiavi saranno queste ad essere garanti dell&#8217;accesso sicuro tra i due terminali. Chiavi perch\u00e9 per l&#8217;appunto sono due, una Privata e un Pubblica, la prima da utilizzare sul terminale utente (es. client host)\u00a0l&#8217;altra da utilizzare sul terminale remoto (es. un server).<\/p>\n<p><a href=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2016\/06\/private-public-key.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1910 size-medium\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2016\/06\/private-public-key-300x186.png\" alt=\"private-public-key\" width=\"300\" height=\"186\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2016\/06\/private-public-key-300x186.png 300w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2016\/06\/private-public-key-600x372.png 600w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2016\/06\/private-public-key.png 650w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>La Private Key e la Public Key vanno immaginate come una\u00a0chiave vera e propria ed un lucchetto. La chiave privata (Private Key) \u00e8 la chiave vera e propria quella che voi avete nel vostro portachiavi, deve stare in un luogo sicuro e non deve essere mai smarrita, un po&#8217; come le vostre chiavi di casa. Mentre la chiave pubblica (Public Key) deve essere immaginata\u00a0come la serratura di casa o il\u00a0lucchetto della nostra bici, tutti possono vedere, guardare e toccare l&#8217;esterno ma solo con grande dispendio di tempo e di energie pu\u00f2 essere rotto il cilindro per carpire\u00a0gli <em>ingranaggi o pistoni<\/em>\u00a0al suo interno e successivamente, dagli <em>ingranaggi o pistoni,\u00a0<\/em>ricostruire la chiave per sbloccare\u00a0la serratura. Converrete con me che la cosa \u00e8 parecchio lunga e complicata.<\/p>\n<p>Vediamo nel dettaglio come costruire la chiave, il lucchetto e sopratutto come utilizzare questo metodo di autenticazione. Dall&#8217;esempio che segue capirete anche il perch\u00e9 questo metodo di autenticazione \u00e8 pi\u00f9 sicuro del tradizionale username e password.<\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<p>Supponiamo di avere due terminali,\u00a0il nostro computer locale (client, host da cui dobbiamo connetterci) e il nostro computer remoto (server LINUX, host sul quale dobbiamo connetterci) con IP pubblico 1.2.3.4<\/p>\n<blockquote><p>Nell&#8217;esempio che segue utilizzer\u00f2 una via che dal mio punta di vista aiuta gli utenti poco pratici a capire il funzionamento ma ognuno pu\u00f2 eseguire queste operazioni propedeutiche con il metodo o il protocollo preferito.<\/p>\n<p><strong>E&#8217; importante che il l&#8217;host\u00a0remoto (server) utilizzi come OS Linux<\/strong><\/p>\n<\/p><\/blockquote>\n<h3>Creiamo le chiavi<\/h3>\n<p>Su <strong>Linux o Mac<\/strong> installare openssh o simile. Eseguire:<\/p>\n<pre class=\"theme:classic lang:sh decode:true \">ssh-keygen -t rsa<\/pre>\n<p>da questo comando saranno salvati2 file sulla vostra root del terminale.<\/p>\n<p>Su <strong>Windows <\/strong>installare PuTTY ed eseguire il tool PuTTYgen seguire le istruzioni e salvare le due chiavi sull&#8217;host windows.<\/p>\n<p>A questo punto avremo 2 chiavi una pubblica e una privata. Come detto nella\u00a0premessa a questo articolo, la chiave privata va tenuta al sicuro sul nostro client mentre la pubblica va utilizzata sul server e quindi dobbiamo procedere a caricare il file della chiave pubblica sul server remoto.<\/p>\n<h3>Carichiamo la\u00a0nostra chiave pubblica (il lucchetto) sul server<\/h3>\n<p>Inanzi tutto dobbiamo conneterci sul server remoto tramite connessione SSH e con il metodo <em>tradizionale<\/em> di username e password.<\/p>\n<p><strong>Linux o Mac<\/strong><\/p>\n<p>Da terminale testiamo la connessione ssh<\/p>\n<pre class=\"theme:classic lang:sh decode:true \">$ ssh username@1.2.3.4\r\nusername@1.2.3.4's password: [Enter Your Password Here]\r\n# come vedete ci viene richiesta la password<\/pre>\n<p>Se adesso facciamo un paio di operazioni preliminari controlliamo se esiste la cartella nascosta <span style=\"color: #3366ff;\"><em>.ssh<\/em><\/span>\u00a0e controlliamo i permessi utilizzando il comando <em><span style=\"color: #3366ff;\">ls -l<\/span><\/em> adesso per comodit\u00e0 usciamo dalla connessione ssh sul server tramite il comando <em><span style=\"color: #3366ff;\">exit\u00a0<\/span><\/em>e lavoriamo sul nostro terminale.<\/p>\n<p>Se la cartella .ssh non esiste creiamola<\/p>\n<pre class=\"theme:classic lang:sh decode:true\">ssh username@1.2.3.4 mkdir -p \u223c\/.ssh<\/pre>\n<p>Carichiamo la nostra chiave pubblica precedentemente creata \u00a0sul server remoto ci sono due strade<br \/>\n<em>Supponiamo la nostra public key che sia stata salvata in <strong>.ssh<\/strong> e che sia nominata come <strong>id_rsa.pub<\/strong> il nostro intento \u00e8 quello di caricarla sul server nella cartella <strong>.ssh<\/strong> all&#8217;intenro della root utente e rinominiamola come\u00a0<strong>authorized_keys <\/strong>che come ci aiuta a capire la traduzione\u00a0sono le chiavi autorizzate ad accedere al server<\/em><\/p>\n<pre class=\"theme:classic lang:sh decode:true\">cat \u223c\/.ssh\/id_rsa.pub | ssh username@1.2.3.4 'cat &gt;&gt; \u223c\/.ssh\/authorized_keys'<\/pre>\n<p>Oppure<\/p>\n<pre class=\"lang:sh decode:true\">ssh-copy-id username@1.2.3.4<\/pre>\n<p>Caricata la chiave sul server remoto, impostiamo permessi pi\u00f9 sicuri sulla cartella .ssh e sul file <em>authorized_keys<\/em><\/p>\n<pre class=\"theme:classic lang:sh decode:true\">ssh username@1.2.3.4 'chmod 700 \u223c\/.ssh; chmod 640 \u223c\/.ssh\/authorized_keys'<\/pre>\n<p>Con <strong>Windows<\/strong> utilizziamo PuTTY e WinSCP tramite il primo ci connettiamo tramite SSH e con WinSCP carichiamo, rinominiamo la chiave pubblica e impostiamo i permessi. Le chiavi generate con PuTTYgen saranno salvate in percorsi e con nomi che noi abbiamo scelto, pertanto sono diversi da quelli presenti nell&#8217;esempio. La logica di funzionamento \u00e8 identica ma per il momento, se non sapete come utilizzare la chiave privata con PuTTY e WinSCP, vi consiglio di leggere qualche topic sui forum ufficiali ma vi garantisco che il tutto \u00e8 molto semplice.<\/p>\n<p>Comunque gli step da fare sono:<\/p>\n<ol>\n<li>Creare le chiavi, pubblica e privata, tramite PuTTYgen<\/li>\n<li>Caricare la chiave pubblica sul server remoto all&#8217;interno della cartella .ssh dentro la root dell&#8217;utente autorizzato alla connessione. Per caricare il file potete utilizzare SCP, FTP o altri metodi e protocolli che avete a disposizione.<\/li>\n<li>Rinominare la chiave pubblica all&#8217;interno della cartella <em>.ssh<\/em> come\u00a0<em>authorized_keys<\/em><\/li>\n<li>Impostare PuTTY o WinSCP ad utilizzare la nostra chiave privata per la connessione sul server. <em>Per\u00a0questo vi consiglio di consultare\u00a0i forum o le guide ufficiali dei due software.<\/em><\/li>\n<\/ol>\n<h3>Testiamo la connessione tramite il metodo delle chiavi<\/h3>\n<p>Dal nostro client<\/p>\n<pre class=\"theme:classic lang:sh decode:true \">ssh username@1.2.3.4<\/pre>\n<p>E vedrete che non ci verr\u00e0\u00a0richiesta alcuna password pertanto se volessimo utilizzare degli script o SCP per il trasferimento dei file possiamo connetterci senza obbligatoriamente inserire password manualmente.<\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<p>Come dicevo il metodo delle chiavi \u00e8 molto pi\u00f9 sicuro dell&#8217;utilizzo di username e password.\u00a0Questo perch\u00e9?<\/p>\n<ul class=\"styled-list fa-ul\"><li><i class=\"fa fa-check\"><\/i>Il file che contiene la chiave privata contiene una stringa con\u00a0molti pi\u00f9 caratteri di una password tradizionale anche se complessa.<\/li> <li><i class=\"fa fa-check\"><\/i>Sia la chiave e il lucchetto devono essere compatibili tra di loro al 100%. Immaginatevi le vostre chiavi di casa e la serratura della porta di casa, vi \u00e8 mai capitato che la chiave \u00e8 usurata e la serratura non gira? Oppure avete inserito una chiave simile ma non era quella corretta? Converrete che in questi casi non \u00e8 possibile entrare in casa.<\/li> <li><i class=\"fa fa-check\"><\/i>Inoltre sulla chiave pubblica pu\u00f2 essere protetta da password in questo caso per\u00a0accedere sul server remoto oltre ad essere in possesso della chiave privata dobbiamo conoscere la password della chiave pubblica altrimenti non sar\u00e0 possibile neppure lo scambio d&#8217;informazioni tra le due chiavi, immaginate un blocco sulla serratura che impedisce persino di inserire la chiave al suo interno. <em>E&#8217; importante specificare che nel caso venga utilizzata una password sulla chiave pubblica l&#8217;esecuzione di script remoti automatizzati sar\u00e0 pi\u00f9 complessa, in quanto \u00e8 necessario che l&#8217;utente immetta la password della chiave pubblica manualmente o che negli script venga lanciata in chiaro.<\/em><\/li> <\/ul>\n<p>Buona connessione \ud83d\ude09<\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Questa \u00e8 una guida per la creazione di una connessione sicura in SSH o SCP senza obbligatoriamente utilizzare una password da scrivere nel terminale ma al suo posto utilizzando delle chiavi criptografate. Oltre ad una maggiore sicurezza questa soluzione offre la possibilit\u00e0 di lanciare degli script o procedure remote tra pi\u00f9 server in maniera del tutto sicura e senza necessariamente che l&#8217;utente debba intervenire inserendo la password manualmente o scrivendo un echo con la password in chiaro nello script. La logica \u00e8 la seguente, la connessione avviane tra due terminali, nella maniera tradizionale l&#8217;utente ha l&#8217;obbligo di autenticarsi puntando lo username e inserendo la\u00a0password dopo la connessione, mentre nella maniera delle chiavi , passatemi il termine,\u00a0l&#8217;utente non deve fare niente dopo l&#8217;avvenuta connessione senza rinunciare alla sicurezza. Utilizzando le chiavi saranno queste ad essere garanti dell&#8217;accesso sicuro tra i due terminali. Chiavi perch\u00e9 per l&#8217;appunto sono due, una Privata e un Pubblica, la prima da utilizzare sul terminale utente (es. client host)\u00a0l&#8217;altra da utilizzare sul terminale remoto (es. un server). La Private Key e la Public Key vanno immaginate come una\u00a0chiave vera e propria ed un lucchetto. La chiave privata (Private Key) \u00e8 la chiave vera e propria quella che [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[38,60,63,10,42,62,33],"class_list":["post-1885","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-controllo-remoto","tag-howto","tag-informatica","tag-linux","tag-risoluzione-problemi","tag-ssh","tag-ubunut"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4SGGs-up","_links":{"self":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/comments?post=1885"}],"version-history":[{"count":0,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1885\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media?parent=1885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/categories?post=1885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/tags?post=1885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}