{"id":1153,"date":"2011-04-09T18:05:01","date_gmt":"2011-04-09T17:05:01","guid":{"rendered":"http:\/\/www.zarrelli.org\/blog\/?p=1153"},"modified":"2011-04-09T18:34:23","modified_gmt":"2011-04-09T17:34:23","slug":"autenticarsi-con-ssh-senza-password","status":"publish","type":"post","link":"https:\/\/www.zarrelli.org\/blog\/autenticarsi-con-ssh-senza-password\/","title":{"rendered":"Autenticarsi con ssh senza password, qualche profilo e i comandi automatizzati"},"content":{"rendered":"<h2><strong>Password, che noia!<\/strong><\/h2>\n<p>&nbsp;<br \/>\nQuando, per una ragione o l&#8217;altra, ci ritrova troppo spesso o troppe poche volte, a collegarsi a un host remoto via shh, indicare o ricordare una password diventa un&#8217;operazione noiosa, difficile, impossibile.<\/p>\n<p>Lo stesso accade se si hanno troppi computer cui collegarsi: ricordare le password \u00e8 quasi impossibile, a meno di abbassare i livelli di sicurezza e utilizzarne una per tutti, oppure impiegare termini banali, o anche troppo correlati a una qualche caratteristica dell&#8217;utilizzatore.<\/p>\n<p>Ora, se non vogliamo incorrere nel pericolo di non ricordarci pi\u00f9 una password, oppure di utilizzarne di insicure, o anche di doverle scrivere in qualche portachiave elettronico, beh, allora, cosa fare?<\/p>\n<p>Semplice.<\/p>\n<p>Basta non utilizzare alcuna password.<\/p>\n<p>Sia inteso. Non vogliamo dire di lasciare l&#8217;account aperto, solo lo proteggeremo in maniera differente, utilizzando delle chiavi di autenticazione che verranno scambiate fra il nostro account locale e quello remoto.<\/p>\n<p>Vedremo quindi come creare delle chiavi di autenticazione che verranno scambiate fra il nostro account locale e quello remoto, il che ci consentir\u00e0 di autenticarci sull&#8217;host remoto senza dover ricordare alcuna password.<\/p>\n<p>Ci avvarremo quindi dei benefici delle chiavi asimmetriche, senza addentrarci troppo nei tecnicismi della crittografia. Per ora, immaginatevi che una chiave asimmetrica sia come uno di quelle medagliette da innamorati in cui un cuore viene spezzato in due parti in maniera irregolare: solo le due parti originali potranno ricostituire la versione integrale dello schema, tutte le altre combinazioni non saranno accettate.<\/p>\n<p>Una chiave asimmetrica \u00e8, schematizzando all&#8217;osso, qualcosa di simile: due differenti parti, una chiave pubblica e una chiave privata esclusive, generate insieme e uniche in grado di combaciare l&#8217;una con l&#8217;altra.<\/p>\n<p>Fermiamoci ora un attimo e introduciamo qualche attore in questo scenario:<\/p>\n<p><strong>Computer locale<\/strong>: \u00e8 il computer dal quale tenter\u00f2 di autenticarmi su un host remoto (SALOTTO nel nostro esempio);<\/p>\n<p><strong>Utente locale<\/strong>: \u00e8 l&#8217;utente il cui account useremo per accedere al computer locale (zarrelli, nel nostro esempio);<\/p>\n<p><strong>Computer remoto<\/strong>: \u00e8 il computer in rete al quale tenter\u00f2 di collegarmi (giorgioz, nel nostro esempio);<\/p>\n<p><strong>Utente remoto<\/strong>: \u00e8 l&#8217;utente il cui account useremo per accedere al computer remoto (zarrelli e giorgiossh, nel nostro esempio;<\/p>\n<p><strong>Chiave privata:<\/strong> \u00e8 la chiave che non dovr\u00f2 <strong>MAI<\/strong> distribuire e che star\u00e0 sul computer locale (chiave.di.autenticazione.1, nel nostro esempio);<\/p>\n<p><strong>Chiave pubblica<\/strong>: \u00e8 la chiave che distribuir\u00f2 sugli host\/account ai quali vorr\u00f2 collegarmi in remoto (chiave.di.autenticazione.1.pub, nel nostro esempio).<\/p>\n<h2><strong>Creiamo le nostre chiavi<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Per prima cosa dobbiamo creare il nostro paio di chiavi pubblica e privata.<br \/>\nEntriamo nel nostro account locale, che nel mio caso \u00e8 <strong>zarrelli<\/strong>, e creiamo la directory che conterr\u00e0: le chiavi ssh:<\/p>\n<pre>cd ~\r\nmkdir .ssh<\/pre>\n<p>e ora facciamo in modo che solo l&#8217;utente possa leggere, scrivere, entrare in questa directory:<\/p>\n<pre>chmod 700 .ssh\r\nls -lah .ssh\r\ndrwx------   2 zarrelli zarrelli 4,0K 2011-04-09 13:30 \r\ndrwx--x--- 104 zarrelli zarrelli  24K 2011-04-09 13:12 ...<\/pre>\n<p>Entriamo nella nuova directory:<\/p>\n<pre>cd .ssh<\/pre>\n<p>e ora utilizziamo ssh-keygen per creare le nostre nuove chiavi:<\/p>\n<pre>ssh-keygen -b 2048 -C \"Chiave di accesso al server remoto\" -t rsa -f chiave.di.autenticazione.1 -N \"\"<\/pre>\n<p>Diamo un&#8217;occhiata alle varie opzioni:<\/p>\n<p>-b 2048, crea una chiave di 2048 bit di lunghezza. E&#8217; una lunghezza considerata sicura;<\/p>\n<p>-C \u201cChiave di accesso al server remoto\u201d, \u00e8 un semplice commento mnemonico;<\/p>\n<p>-t rsa, indica il tipo di chiave, che pu\u00f2 essere rsa1 per connessioni ssh di protocollo 1, rsa e dsa per connessioni ssh di protocollo 2.<\/p>\n<p>-f  chiave.di.autenticazione.1, indica il nome dei file in cui verranno scritte le chiavi;<\/p>\n<p>-N \u201c\u201d, indica la password con cui proteggere la chiave. Nel nostro caso, lasciamo due apici consecutivi, in modo da non impostare alcuna password. Stiamo cercando di farne a meno, giusto?<\/p>\n<p><img decoding=\"async\" title=\"keygen\" src=\"https:\/\/www.zarrelli.org\/blog\/wp-content\/uploads\/2011\/04\/keygen.png\" alt=\"keygen\" \/><\/p>\n<p>Notate la ASCII art? E&#8217; nient&#8217;altro che una rappresentazione casuale della vostra chiave. Se non vi appare, ptete sempre abilitarla nella configurazione di ssh, tramite la voce<\/p>\n<pre>VisualHostKey yes<\/pre>\n<p>Ora, dovremmo avere due chiavi, diamo un&#8217;occhiata in .ssh<\/p>\n<pre>ls -lah ~\/.ssh\r\ntotale 56K\r\ndrwx------   2 zarrelli zarrelli 4,0K 2011-04-09 14:21 .\r\ndrwx--x--- 104 zarrelli zarrelli  24K 2011-04-09 13:58 ..\r\n-rw-------   1 zarrelli zarrelli 1,7K 2011-04-09 13:43 chiave.di.autenticazione.1\r\n-rw-r--r--   1 zarrelli zarrelli  416 2011-04-09 13:43 chiave.di.autenticazione.1.pub<\/pre>\n<p>Bene, la chiave privata &#8220;chiave.di.autenticazione.1&#8221; e la chiave pubblica &#8220;chiave.di.autenticazione.1.pub&#8221; sono al loro posto e date un&#8217;occhiata ai permessi, pi\u00f9 restrittivi per la chiave privata: questa non deve mai cadere in mano ad alcuno, n\u00e9 essere leggibile da un utente che non sia quello legittimo sulla macchina locale. <\/p>\n<p>Non va <strong>MAI<\/strong> messa su una macchina remota.<\/p>\n<p>Ci siamo quasi, ora la chiave pubblica va copiata sull&#8217;host remoto cui vogliamo collegarci. Per prima cosa, connettiamoci all&#8217;account remoto usando le solite password e vediamo se l&#8217;utente ha una directory .ssh:<\/p>\n<pre>ssh 192.168.0.9\r\nThe authenticity of host '192.168.0.9 (192.168.0.9)' can't be established.\r\nRSA key fingerprint is 5e:24:3a:33:22:7f:ac:a1:17:ac:dd:78:48:4f:0e:dc.\r\nAre you sure you want to continue connecting (yes\/no)? yes\r\nWarning: Permanently added '192.168.0.9' (RSA) to the list of known hosts.\r\nzarrelli@192.168.0.9's password:\r\nLinux giorgioz 2.6.37-zarrelli-1 #1 SMP Mon Jan 24 11:28:15 CET 2011 x86_64<\/pre>\n<pre>The programs included with the Debian GNU\/Linux system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in \/usr\/share\/doc\/*\/copyright.<\/pre>\n<pre>Debian GNU\/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\r\npermitted by applicable law.\r\nYou have new mail.\r\nLast login: Sat Apr  9 13:30:28 2011 from salotto.local<\/pre>\n<p>Notate la key fingerprint e il messaggio in cui il ci viene detto che la chiave rsa relativa all&#8217;host remoto verr\u00e0 inserita nella lista dei known hosts?<\/p>\n<p>Ok, diamo un&#8217;occhiata a .ssh del nostro computer locale, nel nostro account locale:<\/p>\n<pre>ls -lah .ssh\/\r\ntotale 68K\r\ndrwx------   2 zarrelli zarrelli 4,0K 2011-04-09 14:29 .\r\ndrwx--x--- 104 zarrelli zarrelli  24K 2011-04-09 13:58 ..\r\n-rw-------   1 zarrelli zarrelli 1,7K 2011-04-09 13:43 chiave.di.autenticazione.1\r\n-rw-r--r--   1 zarrelli zarrelli  416 2011-04-09 13:43 chiave.di.autenticazione.1.pub\r\n-rw-r--r--   1 zarrelli zarrelli  442 2011-04-09 14:29 known_hosts<\/pre>\n<pre>Notato il nuovo file known_hosts? Diamoci un'occhiata:<\/pre>\n<pre>cat .ssh\/known_hosts<\/pre>\n<pre>|1|7cgqnrktDWc6nlCotoulbASiTMM=|IdWT4iO3qLTJ6A5mEf0UhIIvgYs= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxW6c7w4gaiD1ypA6KAL8BbVLaik4lMmKTYamIq64LxfD0LbQXzGfsq2GU0I3oWbhvizZaKYxOjo6FRmRP\/tm1Ajush4wdLIBFw6UJ7EHsueukyb67AqfbDJ6WCotM2yGzTHmjyVxPE74aq7SpBdbk92kSGmEHZwn0+T3I0aIiZ59Bonce3o5IPMmkVNiQD+P7wiWrhjUgrvOmwz9SDllHkwQGAuMLw0+YMRxsvo9p1uz0wPYEJgl6wFa9ZWCP3zjJXrDJONZZ6RWD1gT2F\/M2Z8b2JdJ5tTZT6LqUUxOLpq73vX1knSVLEuf9dLPdzDRX658RtyVV0Hf0VNwOBJqB<\/pre>\n<p>Si tratta di una impronta crittografata con un algoritmo di hashing, basata sull&#8217;hostname e indirizzo IP del computer remoto. In questo modo, quando vi collegherete a un computer remoto cui gi\u00e0 vi siete connessi almeno una volta, ssh hasher\u00e0 l&#8217;hostname cui tenterete di connettervi e cercher\u00e0 nel file known_hosts la relativa chiave pubblica associata all&#8217;host.<\/p>\n<p>Una breve controverifica con ssh-keyscan ci dar\u00e0 la conferma:<\/p>\n<pre>ssh-keyscan rsa 192.168.0.9\r\n# 192.168.0.9 SSH-2.0-OpenSSH_5.5p1 Debian-6\r\n192.168.0.9 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxW6c7w4gaiD1ypA6KAL8BbVLaik4lMmKTYamIq64LxfD0LbQXzGfsq2GU0I3oWbhvizZaKYxOjo6FRmRP\/tm1Ajush4wdLIBFw6UJ7EHsueukyb67AqfbDJ6WCotM2yGzTHmjyVxPE74aq7SpBdbk92kSGmEHZwn0+T3I0aIiZ59Bonce3o5IPMmkVNiQD+P7wiWrhjUgrvOmwz9SDllHkwQGAuMLw0+YMRxsvo9p1uz0wPYEJgl6wFa9ZWCP3zjJXrDJONZZ6RWD1gT2F\/M2Z8b2JdJ5tTZT6LqUUxOLpq73vX1knSVLEuf9dLPdzDRX658RtyVV0Hf0VNwOBJqB<\/pre>\n<p>Guarda caso, ssh-keyscan non fa altro che raccogliere la chiave pubblica dell&#8217;host e, da quello che possiamo vedere, in known_hosts \u00e8 inserita proprio la chiave pubblica dell&#8217;host 192.168.0.9.<\/p>\n<p>A cosa ci torna utile? Beh, questa opzione, abilitata dalla keyword HashKnownHosts nel file di configurazione di sshd, ci permette di rilevare se la host key pubblica di un host \u00e8 cambiata e ci consente di capire se c&#8217;\u00e8 un qualche pericolo in vista.<\/p>\n<p>A questo punto, dobbiamo trasferire la chiave pubblica dal computer locale al computer remoto, autenticandovi con la password dell&#8217;utente remoto:<\/p>\n<pre>zarrelli@SALOTTO:~\/.ssh$ ssh-copy-id -i chiave.di.autenticazione.1.pub zarrelli@192.168.0.9\r\nzarrelli@192.168.0.9's password:\r\nNow try logging into the machine, with \"ssh 'zarrelli@192.168.0.9'\", and check in:\r\n.ssh\/authorized_keys\r\nto make sure we haven't added extra keys that you weren't expecting.<\/pre>\n<p>Ora, dato che la mia macchina locale si chiama SALOTTO e quella remota 192.168.0.9, provo a collegarmi dalla macchina locale a quella remota, usando l&#8217;utente zarrelli e SENZA fornire alcuna password:<\/p>\n<pre>zarrelli@SALOTTO:~\/.ssh$ ssh zarrelli@192.168.0.9\r\nLinux giorgioz 2.6.37-zarrelli-1 #1 SMP Mon Jan 24 11:28:15 CET 2011 x86_64\r\nThe programs included with the Debian GNU\/Linux system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in \/usr\/share\/doc\/*\/copyright.\r\nDebian GNU\/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\r\npermitted by applicable law.\r\nYou have new mail.\r\nLast login: Sat Apr  9 16:52:56 2011 from salotto.local\r\nzarrelli@giorgioz:~$<\/pre>\n<p>BINGO! Sono entrato nell&#8217;host &#8220;giorgioz&#8221;, all&#8217;indirizzo IP 192.168.0.9 come utente zarrelli, senza che mi venisse richiesta alcuna password. Andiamo a dare un&#8217;altra occhiata alla directory .ssh sul computer remoto (giorgioz):<\/p>\n<pre>zarrelli@giorgioz:~\/.ssh$ ls -lah\r\ntotale 16K\r\ndrwx------  2 zarrelli zarrelli 4,0K  9 apr 16.59 .\r\ndrwxr-xr-x 78 zarrelli zarrelli 4,0K  9 apr 16.59 ..\r\n-rw-------  1 zarrelli zarrelli  416  9 apr 16.53 authorized_keys\r\n-rw-r--r--  1 zarrelli zarrelli 3,9K 15 mar 14.55 known_hosts<\/pre>\n<p>E&#8217; apparso un nuovo file, authorized_keys, il quale contiene le chiavi pubbliche degli utenti autorizzati a connettersi a questo account. Diamo uno sguardo al suo contenuto:<\/p>\n<pre>zarrelli@giorgioz:~\/.ssh$ cat authorized_keys\r\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUX3+4gEUScWEnV3muzp0Mhr7KeNQTM1aYHEbfH6J+tL2Tb9euVslYUhA\/zM21wVKhvuXOzph+9w1P9ZF2bRDBa0tD5U3TXf4D6eylvBXNCeARGJCB0krvyVmgF5RaObYNJH9kBKt2Ih02QWe\/n\/axY\/SSEuRquUxaA27Bl+bRvxPivjQnAT3z1POeqUJBySBbJiNlE3upQjVzVn5w7jL35ZQVAJiOx0YbbCDlmNkYBDJtrtjuP4CrdenTJe7Xnzyruhrycs4xw5fHNhQcY00pbipA5sV8O6EQuNFdnxrnxZ2yHZGLQE+wVukK0M3sPWm8DqBE9dxq3pZ2y970UMQN Chiave di accesso al server remoto<\/pre>\n<p>Qui ritroviamo la chiave pubblica creata sul computer locale (SALOTTO). In realt\u00e0, ssh-copy-id ha fatto un lavoro che potremmo eseguire noi a mano, ovvero ha creato nella directory .ssh dell&#8217;utente con cui vogliamo entrare nell&#8217;host remoto un file authorized_keys e poi vi ha copiato all&#8217;interno il contenuto della chiave pubblica chiave.di.autenticazione.1.pub.<\/p>\n<p>Ovviamente, potremmo esportare la chiave pubblica su ogni utente remoto che vorremo utilizzare per la connessione all&#8217;host in rete, baster\u00e0 poi utilizzare per il collegamento l&#8217;identificativo utente@host.<\/p>\n<h2><strong>Configuriamo i nostri profili<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Simpatico, vero? Per\u00f2, c&#8217;\u00e8 un per\u00f2, con diversi utenti e diverse macchine, come fare a ricordarsi quale identit\u00e0 o quale chiave utilizzare, senza essere costretti a usare una chiave per tutto?<\/p>\n<p>Basta usare un file di configurazione. Ora, nella directory .ssh dell&#8217;utente locale create il file<\/p>\n<pre>config<\/pre>\n<p>Al cui interno scriverete:<\/p>\n<pre>Host  Nome_Configurazione\r\n      AddressFamily           inet\r\n      ConnectionAttempts      10\r\n      ForwardAgent            no\r\n      ForwardX11              no\r\n      ForwardX11Trusted       no\r\n      GatewayPorts            yes\r\n      HostBasedAuthentication no\r\n      HostKeyAlias            alias_della_chiave\r\n      HostName                nome_host\r\n      IdentityFile            ~\/.ssh\/chiave.di.autenticazione.1\r\n      PasswordAuthentication  no\r\n      Protocol                2\r\n      Compression             yes\r\n      CompressionLevel        9\r\n      ServerAliveCountMax     3\r\n      ServerAliveInterval     15\r\n      TCPKeepAlive            no\r\n      User                    utente_remoto<\/pre>\n<p>Premesso che il file config \u00e8 valido solo per l&#8217;utente locale, mentre se vogliamo che le direttive indicate al suo interno ricadano su tutti gli utenti di sistema dovremo aggiungere le precedenti righe al file \/etc\/ssh\/ssh_config (aggiustate il tiro per le varie distro e OS), fermiamoci per un attimo a esaminare le principali fra le direttive appena scritte:<\/p>\n<pre>Host<\/pre>\n<p>In realt\u00e0&#8230;non si riferisce ad alcun host. Indica semplicemente l&#8217;inizio di un insieme di direttive che arrivano fino al successivo &#8220;Host&#8221; e che compongono una configurazione. Date un nome a piacere.<\/p>\n<pre>HostKeyAlias<\/pre>\n<p>Indica un alias da utilizzare quando si vuole registrare o ricercare la chiave di un host, in alternativa all&#8217;IP. In questo modo, quindi, \u00e8 possibile gestire pi\u00f9 chiavi per host differenti ospitati sullo stesso IP.<\/p>\n<pre>HostName<\/pre>\n<p>Indica l&#8217;host name o l&#8217;indirizzo IP cui ci si vuole collegare.<\/p>\n<pre>IdentityFile<\/pre>\n<p>Definisce quale \u00e8 il file da cui leggere la chiave privata che attesta l&#8217;identit\u00e0 dell&#8217;utente. Normalmente, se non indicato nulla, per il protocollo 1 il file \u00e8 ~\/.ssh\/identity,\u00a0mentre per il protocollo ssh 2 si usano ~\/.ssh\/id_rsa e ~\/.ssh\/id_dsa, a seconda del tipo di chiave creata.<\/p>\n<pre>User<\/pre>\n<p>Indica con quale utente ci si vuole collegare all&#8217;host definito da questa configurazione.<\/p>\n<p>Visto che abbiamo qualche nozioni in pi\u00f9, usiamola per giocare e andiamo sul computer remoto per creare un nuovo utente:<\/p>\n<pre>giorgioz:~# adduser --disabled-password giorgiossh\r\nAggiunta dell'utente \u00abgiorgiossh\u00bb ...\r\nAggiunta del nuovo gruppo \u00abgiorgiossh\u00bb (1001) ...\r\nAggiunta del nuovo utente \u00abgiorgiossh\u00bb (1001) con gruppo \u00abgiorgiossh\u00bb ...\r\nCreazione della directory home \u00ab\/home\/giorgiossh\u00bb ...\r\nCopia dei file da \u00ab\/etc\/skel\u00bb ...\r\nModifica delle informazioni relative all'utente giorgiossh\r\nInserire il nuovo valore o premere INVIO per quello predefinito\r\n\tNome completo []: Giorgio Zarrelli\r\n\tStanza n\u00b0 []: 1\r\n\tNumero telefonico di lavoro []: 12345\r\n\tNumero telefonico di casa []: 123456\r\n\tAltro []:\r\nLe informazioni sono corrette? [S\/n]<\/pre>\n<p>L&#8217;utente non pu\u00f2 essere usato con autenticazione via password, visto che abbiamo abilitato esplicitamente il supporto a questa funzionalit\u00e0, quindi non potremo utilizzare ssh-copy-id per fare il lavoro sporco. Nessun problema, qualche un cp e un chown aggiusteranno tutto:<\/p>\n<pre>cp -R \/home\/zarrelli\/.ssh\/ \/home\/giorgiossh\/ ; chown -R giorgiossh. \/home\/giorgiossh\/.ssh\/<\/pre>\n<p>Cosa abbiamo fatto? Semplice, abbiamo copiato la directory .ssh dall&#8217;utente zarrelli all&#8217;utente giorgiossh (siamo diventati utente root per farlo), quindi abbiamo reso la directory di destinazione e i file in essa contenuti di propriet\u00e0 dell&#8217;utente giorgiossh.<\/p>\n<p>Non ci rimane che tornare indietro sul computer locale e mettere mano al nostro file config:<\/p>\n<pre>Host  zarrelli\r\n      AddressFamily           inet\r\n      ConnectionAttempts      10\r\n      ForwardAgent            no\r\n      ForwardX11              no\r\n      ForwardX11Trusted       no\r\n      GatewayPorts            yes\r\n      HostBasedAuthentication no\r\n      HostKeyAlias            chiave_zarrelli\r\n      HostName                192.168.0.9\r\n      IdentityFile            ~\/.ssh\/chiave.di.autenticazione.1\r\n      PasswordAuthentication  no\r\n      Protocol                2\r\n      Compression             yes\r\n      CompressionLevel        9\r\n      ServerAliveCountMax     3\r\n      ServerAliveInterval     15\r\n      TCPKeepAlive            no\r\n      User                    zarrelli<\/pre>\n<pre>Host  giorgiossh\r\n      AddressFamily           inet\r\n      ConnectionAttempts      10\r\n      ForwardAgent            no\r\n      ForwardX11              no\r\n      ForwardX11Trusted       no\r\n      GatewayPorts            yes\r\n      HostBasedAuthentication no\r\n      HostKeyAlias            chiave_giorgiossh\r\n      HostName                192.168.0.9\r\n      IdentityFile            ~\/.ssh\/chiave.di.autenticazione.1\r\n      PasswordAuthentication  no\r\n      Protocol                2\r\n      Compression             yes\r\n      CompressionLevel        9\r\n      ServerAliveCountMax     3\r\n      ServerAliveInterval     15\r\n      TCPKeepAlive            no\r\n      User                    giorgiossh<\/pre>\n<p>Cosa abbiamo fatto? Abbiamo creato due configurazioni per lo stesso host, una l&#8217;abbiamo chiamata zarrelli, l&#8217;altra giorgiossh. Poi, nella configurazione zarrelli abbiamo specificato che la chiave dell&#8217;host andr\u00e0 registrata e cercata come chiave_zarrelli e l&#8217;utente con cui collegarsi al sistema remoto \u00e8 zarrelli. Per la configurazione giorgiossh, abbiamo fatto quasi lo stesso, indicando chiave_giorgiossh come alias e giorgio.ssh come utente.<\/p>\n<p>Beh, ora non rimane che provare a collegarsi all&#8217;host remoto indicando non pi\u00f9 l&#8217;indirizzo ip ma il nome della configurazione che vogliamo caricare, la quale contiene tutte le informazioni che ci servono, dall&#8217;indirizzo ip, al certificato, all&#8217;utente remoto:<\/p>\n<pre>zarrelli@SALOTTO:~\/.ssh$ ssh zarrelli\r\nThe authenticity of host 'chiave_zarrelli (192.168.0.9)' can't be established.\r\nRSA key fingerprint is 5e:24:3a:33:22:7f:ac:a1:17:ac:dd:78:48:4f:0e:dc.\r\nAre you sure you want to continue connecting (yes\/no)? yes\r\nWarning: Permanently added '<strong>chiave_zarrelli<\/strong>' (RSA) to the list of known hosts.\r\nLinux giorgioz 2.6.37-zarrelli-1 #1 SMP Mon Jan 24 11:28:15 CET 2011 x86_64<\/pre>\n<pre>The programs included with the Debian GNU\/Linux system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in \/usr\/share\/doc\/*\/copyright.<\/pre>\n<pre>Debian GNU\/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\r\npermitted by applicable law.\r\nYou have new mail.\r\nLast login: Sat Apr  9 18:08:18 2011 from salotto.local\r\n<strong>zarrelli<\/strong>@giorgioz:~$<\/pre>\n<p>Bum! Siamo entrati sul computer remoto (@giorgioz), come utente zarrelli e la chiave \u00e8 stata registrata con l&#8217;alias chiave_zarrelli. Adesso proviamo con l&#8217;altra configurazione, giorgiossh:<\/p>\n<pre>zarrelli@SALOTTO:~\/.ssh$ ssh giorgiossh\r\nThe authenticity of host 'chiave_giorgiossh (192.168.0.9)' can't be established.\r\nRSA key fingerprint is 5e:24:3a:33:22:7f:ac:a1:17:ac:dd:78:48:4f:0e:dc.\r\nAre you sure you want to continue connecting (yes\/no)? yes\r\nWarning: Permanently added '<strong>chiave_giorgiossh<\/strong>' (RSA) to the list of known hosts.\r\nLinux giorgioz 2.6.37-zarrelli-1 #1 SMP Mon Jan 24 11:28:15 CET 2011 x86_64<\/pre>\n<pre>The programs included with the Debian GNU\/Linux system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in \/usr\/share\/doc\/*\/copyright.<\/pre>\n<pre>Debian GNU\/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\r\npermitted by applicable law.\r\nLast login: Sat Apr  9 18:08:35 2011 from salotto.local\r\n<strong>giorgiossh<\/strong>@giorgioz:~$<\/pre>\n<p>Opl\u00e0, eccoci dentro al computer remoto come utente giorgiossh la cui password, ricordiamo, \u00e8 stata bloccata al momento della creazione dell&#8217;utenza stessa.<\/p>\n<p>Da qui in poi, potete giocare a piacimento con il file di configurazione, le cui specifiche potrete leggere richiamando<\/p>\n<pre>man ssh_config<\/pre>\n<p>Ma prima di finire, un ultimo giochino. Vedremo come giorgiossh ci torner\u00e0 utile per eseguire dei comandi automatizzati, senza che questi vengano indicati da linea di comando.<\/p>\n<h2><strong>Automatic lover!<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Torniamo sull&#8217;host remoto (giorgioz) e apriamo il file<\/p>\n<pre>authorized_keys<\/pre>\n<p>dell&#8217;utente<\/p>\n<pre>giorgiossh<\/pre>\n<p>e modifichiamolo aggiungendo all&#8217;inizio della chiave preeseistente, i seguenti caratteri:<\/p>\n<pre>command=\"htop\"<\/pre>\n<p>in modo che alla fine risulti in cos\u00ec:<\/p>\n<pre>command=\"htop\" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUX3+4gEUScWEnV3muzp0Mhr7KeNQTM1aYHEbfH6J+tL2Tb9euVslYUhA\/zM21wVKhvuXOzph+9w1P9ZF2bRDBa0tD5U3TXf4D6eylvBXNCeARGJCB0krvyVmgF5RaObYNJH9kBKt2Ih02QWe\/n\/axY\/SSEuRquUxaA27Bl+bRvxPivjQnAT3z1POeqUJBySBbJiNlE3upQjVzVn5w7jL35ZQVAJiOx0YbbCDlmNkYBDJtrtjuP4CrdenTJe7Xnzyruhrycs4xw5fHNhQcY00pbipA5sV8O6EQuNFdnxrnxZ2yHZGLQE+wVukK0M3sPWm8DqBE9dxq3pZ2y970UMQN Chiave di accesso al server remoto<\/pre>\n<p>Tutto su una riga, anche se la formattazione del blog potrebbe spezzare in pi\u00f9 parti la stringa.<\/p>\n<p>Proviamo a ricollegarci al computer remoto come giorgiossh:<\/p>\n<pre>ssh giorgiossh<\/pre>\n<p>otterremo questo:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.zarrelli.org\/blog\/wp-content\/uploads\/2011\/04\/htop.png\" alt=\"\" \/><\/p>\n<p>E&#8217; da notare che il comando \u00e8 vincolato, ovvero anche se si tenta di dare qualsiasi altra istruzione sulla linea di comando con cui si richiama la connessione, questa non verr\u00e0 eseguita. Volete saperne di pi\u00f9? Per esempio con quale variabile possiamo limitare la login da precisi indirizzi o hostname (from=&#8221;pattern-list&#8221;), o impostare variabili di ambiente (environment=&#8221;NAME=value&#8221;), date una sbirciatina alle opzioni di configurazione delle chiavi autorizzate con un bel:<\/p>\n<pre>man 8 sshd<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Password, che noia! &nbsp; Quando, per una ragione o l&#8217;altra, ci ritrova troppo spesso o troppe poche volte, a collegarsi a un host remoto via shh, indicare o ricordare una password diventa un&#8217;operazione noiosa, difficile, impossibile. Lo stesso accade se si hanno troppi computer cui collegarsi: ricordare le password \u00e8 quasi impossibile, a meno di &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,57,62],"tags":[],"class_list":["post-1153","post","type-post","status-publish","format-standard","hentry","category-gnulinux","category-sicurezza","category-sysadmin","without-featured-image"],"_links":{"self":[{"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/posts\/1153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/comments?post=1153"}],"version-history":[{"count":0,"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/posts\/1153\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/media?parent=1153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/categories?post=1153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zarrelli.org\/blog\/wp-json\/wp\/v2\/tags?post=1153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}