3 155
contributi
Wtf (discussione | contributi) |
Wtf (discussione | contributi) (→Server) |
||
(32 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili | {{SSH | ||
|successivo=SFTP: SSH File Transfer Protocol | |||
}}{{Versioni compatibili}}{{OpenSSH}} | |||
== Installazione == | == Installazione == | ||
È bene premettere che se lo scopo di chi legge è solo collegarsi ad altri computer, ma non permettere la connessione a quello in uso, allora è sufficiente l'installazione del solo client (normalmente già effettuata durante l'installazione di debian), viceversa è sufficiente l'installazione del solo server. | È bene premettere che se lo scopo di chi legge è solo collegarsi ad altri computer, ma non permettere la connessione a quello in uso, allora è sufficiente l'installazione del solo client (normalmente già effettuata durante l'installazione di debian), viceversa è sufficiente l'installazione del solo server. | ||
Premesso questo, per installare sia client che server digitare da terminale: | Premesso questo, per installare sia client che server digitare da terminale con [[privilegi di amministrazione]]: | ||
<pre># | <pre># apt-get install ssh</pre> | ||
Per installare il solo client: | Per installare il solo client: | ||
<pre># | <pre># apt-get install openssh-client</pre> | ||
Per installare il solo server: | Per installare il solo server: | ||
<pre># | <pre># apt-get install openssh-server</pre> | ||
== Utilizzo base == | == Utilizzo base == | ||
Riga 44: | Riga 41: | ||
<pre>Warning: Permanently added 'xxxx.xxxxx.xxxxx' (ECDSA) to the list of known hosts.</pre> | <pre>Warning: Permanently added 'xxxx.xxxxx.xxxxx' (ECDSA) to the list of known hosts.</pre> | ||
A questo punto sarà richiesta la password dell'account remoto cui si sta tentando di accedere. Una volta inseritala | A questo punto sarà richiesta la password dell'account remoto cui si sta tentando di accedere. Una volta inseritala comparirà il prompt dei comandi della macchina remota e l'utente potrà operare come se stesse usando una normalissima istanza del terminale del suo computer.<br/> | ||
Per terminare una connessione è sufficiente digitare: | Per terminare una connessione è sufficiente digitare: | ||
<pre>$ | <pre>$ exit</pre> | ||
eventualmente più volte se nel frattempo si è assunta l'identità di root col comando <code>su</code> (o di qualche altro utente).<br/> | eventualmente più volte se nel frattempo si è assunta l'identità di root col comando <code>su</code> (o di qualche altro utente).<br/> | ||
Riga 66: | Riga 63: | ||
== | == Autenticazione con chiavi == | ||
Come già scritto il metodo di autenticazione utilizzabile fin da subito, cioè l'inserimento della password relativa all'account remoto, non è il più sicuro poiché suscettibili di attacchi a forza bruta o in ogni caso di rivelare la stessa nel caso di collegamento a server fittizi gestiti da malintenzionati.<br/> | Come già scritto il metodo di autenticazione utilizzabile fin da subito, cioè l'inserimento della password relativa all'account remoto, non è il più sicuro poiché suscettibili di attacchi a forza bruta o in ogni caso di rivelare la stessa nel caso di collegamento a server fittizi gestiti da malintenzionati.<br/> | ||
Riga 73: | Riga 70: | ||
# chiave client ('''hostbased'''), concettualmente simile al metodo della chiave pubblica, ma con la differenza che il server remoto verifica l'identità della macchina client e non degli utenti; | # chiave client ('''hostbased'''), concettualmente simile al metodo della chiave pubblica, ma con la differenza che il server remoto verifica l'identità della macchina client e non degli utenti; | ||
# chiave pubblica ('''publickey'''), in sintesi la macchina remota invia all'utente una stringa cifrata con una chiave pubblica precedentemente indicata dall'utente stesso, se il client dell'utente possiede la chiave privata corretta procede a decodificare tale stringa e quindi prova la sua identità al computer remoto che gli garantisce l'accesso; | # chiave pubblica ('''publickey'''), in sintesi la macchina remota invia all'utente una stringa cifrata con una chiave pubblica precedentemente indicata dall'utente stesso, se il client dell'utente possiede la chiave privata corretta procede a decodificare tale stringa e quindi prova la sua identità al computer remoto che gli garantisce l'accesso; | ||
# keyboard-interactive, utilizza una serie di autenticazioni caratterizzate da richieste, fatte dal server SSH, che devono essere confermate dalle risposte mandate dal client SSH. Se le risposte coincidono con quelle memorizzate sul Server, l'utente è autorizzato ad accedere da remoto alla macchina Linux altrimenti questi non può accedere alla macchina Linux; | # keyboard-interactive (''ChallengeResponseAuthentication''), utilizza una serie di autenticazioni caratterizzate da richieste, fatte dal server SSH, che devono essere confermate dalle risposte mandate dal client SSH. Se le risposte coincidono con quelle memorizzate sul Server, l'utente è autorizzato ad accedere da remoto alla macchina Linux altrimenti questi non può accedere alla macchina Linux. Di default avviene tramite [[PAM]], e corrisponde alla richiesta di password dell'account remoto a cui si intende accedere; | ||
# '''password''', si richiede la password dell'utenza indicata in fase di login per verificare se l'utente è autorizzato ad accedere a tale utenza sulla macchina remota Linux. | # '''password''' (''PasswordAuthentication''), si richiede la password dell'utenza indicata in fase di login per verificare se l'utente è autorizzato ad accedere a tale utenza sulla macchina remota Linux, a prescindere dalla procedura prevista per l'autenticazione sulla macchina remota. | ||
Ai fini di questa guida saranno trattate, in aggiunta all'ultimo tipo già descritto, anche le modalità ''hostbased'' e ''publickey'', tuttavia prima di procedere a descriverle nel dettaglio è bene precisare che i due metodi sono simili tra loro poiché entrambi sfruttano l'accoppiata chiave pubblica e privata per suggellare l'autenticazione dell'utente. | Ai fini di questa guida saranno trattate, in aggiunta all'ultimo tipo già descritto, anche le modalità ''hostbased'' e ''publickey'', tuttavia prima di procedere a descriverle nel dettaglio è bene precisare che i due metodi sono simili tra loro poiché entrambi sfruttano l'accoppiata chiave pubblica e privata per suggellare l'autenticazione dell'utente. | ||
{{Box|Nota|Dei due metodi ''hostbased'' e ''publickey'', solo il secondo può dirsi sicuramente più sicuro di quello basato su password.}} | {{Box|Nota|Dei due metodi ''hostbased'' e ''publickey'', solo il secondo può dirsi sicuramente più sicuro di quello basato su password. | ||
Ed entrambi aggiungeranno una nuova possibilità di autenticazione, senza rimuovere quella tramite password, attiva di default. Se si intende rendere possibile l'autenticazione unicamente via chiave pubblica dell'utente oppure del client, è necessario disabilitare l'autenticazione via password ("<code>PasswordAuthentication no</code>" e, se abilitato, "<code>ChallengeResponseAuthentication no</code>") modificando il [[OpenSSH: file di configurazione | file di configurazione]].}} | |||
=== hostbased === | === hostbased === | ||
Riga 129: | Riga 128: | ||
<pre> | <pre> | ||
[...] | [...] | ||
# PasswordAuthentication yes | # PasswordAuthentication yes | ||
HostbasedAuthentication yes | HostbasedAuthentication yes | ||
Riga 140: | Riga 138: | ||
==== Server ==== | ==== Server ==== | ||
È necessario modificare il file <code>/etc/ssh/ssdh_config</code> decommentando <code>HostbasedAuthentication</code> e indicando ''yes'' come valore, oltre ad assicurarsi che lo | È necessario modificare il file <code>/etc/ssh/ssdh_config</code> decommentando <code>HostbasedAuthentication</code> e indicando ''yes'' come valore, oltre ad assicurarsi che lo sia anche il parametro <code>PubkeyAuthentication</code>: | ||
<pre> | <pre> | ||
[...] | [...] | ||
PubkeyAuthentication yes | PubkeyAuthentication yes | ||
#AuthorizedKeysFile %h/.ssh/authorized_keys | #AuthorizedKeysFile %h/.ssh/authorized_keys | ||
Riga 150: | Riga 147: | ||
IgnoreRhosts yes | IgnoreRhosts yes | ||
# For this to work you will also need host keys in /etc/ssh_known_hosts | # For this to work you will also need host keys in /etc/ssh_known_hosts | ||
# similar for protocol version 2 | # similar for protocol version 2 | ||
HostbasedAuthentication yes | HostbasedAuthentication yes | ||
Riga 180: | Riga 176: | ||
{{Box|Sicurezza e codice di sblocco|La sicurezza della procedura di autenticazione NON dipende in alcun modo dal codice di sblocco eventualmente scelto, infatti quest'ultimo serve solo a cifrare la propria chiave privata in modo che questa possa essere utilizzata solo dopo aver inserito correttamente il suddetto codice. Il fine è evidente, cioè impedire l'utilizzo immediato della chiave da parte di persone non autorizzate che in qualche modo siano riuscite a farsene una copia. Si noti che indicare un codice di sblocco implica il doverlo inserire ogni volta che si deve usare tale chiave.}} | {{Box|Sicurezza e codice di sblocco|La sicurezza della procedura di autenticazione NON dipende in alcun modo dal codice di sblocco eventualmente scelto, infatti quest'ultimo serve solo a cifrare la propria chiave privata in modo che questa possa essere utilizzata solo dopo aver inserito correttamente il suddetto codice. Il fine è evidente, cioè impedire l'utilizzo immediato della chiave da parte di persone non autorizzate che in qualche modo siano riuscite a farsene una copia. Si noti che indicare un codice di sblocco implica il doverlo inserire ogni volta che si deve usare tale chiave.}} | ||
Supponendo di voler creare una coppia di chiavi ''rsa'' basterà quindi digitare: | Supponendo di voler creare una coppia di chiavi ''rsa'' basterà quindi digitare sulla '''macchina client''': | ||
<pre>$ ssh-keygen</pre> | <pre>$ ssh-keygen</pre> | ||
Se invece si vuole aumentare la robustezza delle chiavi è possibile aumentarne il numero di bit (e quindi anche leggermente il tempo di creazione) da 2048 a 4096: | Se invece si vuole aumentare la robustezza delle chiavi è possibile aumentarne il numero di bit (e quindi anche leggermente il tempo di creazione) da 2048 a 4096: | ||
Riga 197: | Riga 193: | ||
==== Client ==== | ==== Client ==== | ||
Nessuna modifica da apportare al file <code>/etc/ssh/ssh_config</code> poiché | Nessuna modifica da apportare al file <code>/etc/ssh/ssh_config</code> poiché il valore predefinito della variabile <code>PubkeyAuthentication</code> risulta già essere impostato a ''yes''. | ||
È tuttavia necessario appendere la chiave pubblica dell'utenza sul client al file <code>~/.ssh/authorized_keys</code> della stessa utenza sulla macchina remota. Tale operazione può essere eseguita manualmente dall'utente, ad esempio copiando e incollando il contenuto della chiave pubblica nel succitato file <code>authorized_keys</code>, oppure usando il seguente comando: | È tuttavia necessario appendere la chiave pubblica dell'utenza sul client al file <code>~/.ssh/authorized_keys</code> della stessa utenza sulla macchina remota. Tale operazione può essere eseguita manualmente dall'utente, ad esempio copiando e incollando il contenuto della chiave pubblica nel succitato file <code>authorized_keys</code>, oppure usando il seguente comando: | ||
<pre>ssh-copy-id -i ~/.ssh/id_rsa.pub utenteremoto@ | <pre>ssh-copy-id -i ~/.ssh/id_rsa.pub utenteremoto@nome_host_remoto</pre> | ||
posto di aver utilizzato il percorso predefinito suggerito da <code>ssh-keygen</code>, diversamente sostituire tale percorso col proprio.<br/> | posto di aver utilizzato il percorso predefinito suggerito da <code>ssh-keygen</code>, diversamente sostituire tale percorso col proprio.<br/> | ||
Si noti che usare <code>scp</code> è fattibile, tuttavia in tal caso si andrà a sovrascrivere il file <code>authorized_keys</code> cancellando quindi eventuali altre chiavi pubbliche presenti. Ad ogni modo il comando da usare in questo caso è: | Si noti che usare <code>scp</code> è fattibile, tuttavia in tal caso si andrà a sovrascrivere il file <code>authorized_keys</code> cancellando quindi eventuali altre chiavi pubbliche presenti. Ad ogni modo il comando da usare in questo caso è: | ||
<pre>$ scp ~/.ssh/id_rsa.pub utenteremoto@ | <pre>$ scp ~/.ssh/id_rsa.pub utenteremoto@nome_host_remoto:~/.ssh/authorized_keys</pre> | ||
==== Server ==== | |||
Nessuna modifica da apportare al file <code>/etc/ssh/sshd_config</code> poiché il valore predefinito della variabile <code>PubkeyAuthentication</code> risulta già essere impostato a ''yes''. | |||
Rimane in ogni caso consigliato di: | |||
* impedire l'autenticazione con utente <code>root</code> (<code>PermitRootLogin no</code>) | |||
* disabilitare l'autenticazione tramite password (<code>PasswordAuthentication no</code>), ma evidentemente solo dopo aver verificato che l'autenticazione tramite chiave pubblica funziona. | |||
{{Box|Nota|Se si trasferisce manualmente la chiave pubblica facendo copia ed incolla tra due editor di testo si presti ATTENZIONE a non spezzare la chiave su più righe. È infatti obbligatoria l'indicazione di '''una sola chiave per riga'''.}} | |||
<br/> | |||
{{Warningbox|Se non si riuscisse a collegarsi ricevendo invece il messaggio ''Permission denied (publickey)'' verificare che: | |||
* la chiave privata usata in fase di autenticazione sia quella corretta; | |||
* la chiave pubblica necessaria sia stata effettivamente (e correttamente) aggiunta al file <code>authorized_keys</code>; | |||
* il file <code>~/.ssh/authorized_keys</code> sia accessibile solo e soltanto al proprietario (600); | |||
* la home dell'utenza che si vuole usare sia scrivibile solo da essa (755, 750 o 700)}}; | |||
<br/> | |||
== Analisi dei file di configurazione == | |||
Si veda [[OpenSSH: file di configurazione | la guida dedicata]]. | |||
== Altri client OpenSSH compatibili == | == Altri client OpenSSH compatibili == | ||
Riga 261: | Riga 235: | ||
Al prompt inserire <code>nome_user@indirizzo_server:porta</code>, et voilà, dopo aver inserito la password si sarà dentro. | Al prompt inserire <code>nome_user@indirizzo_server:porta</code>, et voilà, dopo aver inserito la password si sarà dentro. | ||
== Esempi == | == Esempi == | ||
Riga 290: | Riga 242: | ||
Una delle personalizzazioni più semplici che si può adottare è la modifica della porta predefinita, ovvero l'indicazione di un numero di porta differente dalla 22. Tale scelta può essere una necessità pratica, dovuta ad esempio alla necessità di collegarsi a più macchine tutte poste dietro uno stesso router/NAT, oppure un piccolo artificio per rendere un po' più difficili gli attacchi al proprio server SSH da parte di malintenzionati. | Una delle personalizzazioni più semplici che si può adottare è la modifica della porta predefinita, ovvero l'indicazione di un numero di porta differente dalla 22. Tale scelta può essere una necessità pratica, dovuta ad esempio alla necessità di collegarsi a più macchine tutte poste dietro uno stesso router/NAT, oppure un piccolo artificio per rendere un po' più difficili gli attacchi al proprio server SSH da parte di malintenzionati. | ||
{{Box|Nota|Se si decide di cambiare numero di porta è bene ricordare che i numeri fino a | {{Box|Nota|Se si decide di cambiare numero di porta è bene ricordare che i numeri fino a 1023 sono riservati al sistema, pertanto '''l'utente dovrà scegliere sempre dei valori maggiori o uguali a 1024'''.}} | ||
==== Client ==== | ==== Client ==== | ||
Riga 341: | Riga 293: | ||
[...] | [...] | ||
</pre> | </pre> | ||
== Informazioni superate == | |||
Opzionalmente è possibile installare anche il pacchetto <code>openssh-blacklist</code> | |||
<pre># apt-get install openssh-blacklist</pre> | |||
Nelle precedenti versioni di questa guida era scritto di impostare <code>RSAAuthentication yes</code>. Oggigiorno il parametro <code>RSAAuthentication</code> è stato deprecato. | |||
== Approfondimenti == | == Approfondimenti == | ||
Riga 355: | Riga 315: | ||
* [http://users.telenet.be/mydotcom/howto/linux/sshpasswordless.htm SSH passwordless] | * [http://users.telenet.be/mydotcom/howto/linux/sshpasswordless.htm SSH passwordless] | ||
* [https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Host-based_Authentication Host based authentication] | * [https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Host-based_Authentication Host based authentication] | ||
{{Autori | {{Autori | ||
|Autore = [[Utente:Mm-barabba|Mm-barabba]] 00:55, 20 nov 2010 (CET) | |Autore = [[Utente:Mm-barabba|Mm-barabba]] 00:55, 20 nov 2010 (CET) | ||
|Estesa_da = | |||
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST) | |||
|Verificata_da= | |Verificata_da= | ||
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST) | :[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST) | ||
:[[Utente:HAL 9000|HAL 9000]] 13:56, 26 set 2015 (CEST) | |||
:[[Utente:Ferdybassi|Ferdybassi]] 15:42, 12 mar 2016 (CET) | |||
:[[Utente: | |Numero_revisori=3 | ||
}} | }} | ||
[[Categoria:SSH_server_e_amministrazione_remota]] | [[Categoria:SSH_server_e_amministrazione_remota]] |
contributi