# OpenSSH

OpenSSH (Open Secure Shell) è un insieme di programmi open source che rendono disponibili sessioni crittografate di comunicazione in una rete di computer, seguendo il protocollo di comunicazione Secure Shell. Il progetto è guidato da Theo de Raadt.

## Storia

OpenSSH è stato creato dal team di OpenBSD come alternativa al software originario SSH di Tatu Ylönen, che ora è distribuito con licenza proprietaria. Gli sviluppatori di OpenSSH dichiarano che il loro prodotto sia più sicuro dell'originale, sia per la loro politica di produrre codice pulito e controllato, sia per il fatto, a cui la parola Open nel nome si riferisce, che è rilasciata sotto la licenza open source BSD. Sebbene il codice sorgente dell'originale SSH sia disponibile, le varie restrizioni che sono imposte sul suo uso e distribuzione fanno di OpenSSH un progetto molto più attraente per molti sviluppatori software.
OpenSSH è stato rilasciato la prima volta con la release 2.6 di OpenBSD il 1º dicembre 1999; l'ultima versione invece, la 9.0, è stata rilasciata l'8 aprile 2022.

## Marchio Registrato

Nel febbraio 2001, Tatu Ylönen, Chairman e CTO della SSH Communications Security comunicò alla mailing list degli sviluppatori di OpenSSH, openssh-unix-dev@mindrot.org, che la sua azienda avrebbe fatto rivalsa sulla proprietà dei marchi registrati di SSH e Secure Shell per proteggerli. Tatu inoltre chiese di modificare i riferimenti al protocollo in favore di SecSH o secsh, al fine di mantenere il controllo sui nomi. Infine, propose a OpenSSH di cambiare il proprio nome per evitare una citazione in giudizio; Theo de Raadt rifiutò categoricamente di considerare la possibilità di un cambio di nome.
In quel periodo, "SSH", "Secure Shell" e "ssh" erano termini usati nei documenti che proponevano il protocollo come standard aperto, ed era ipotizzato da molti che così facendo Tatu stesse cedendo ogni diritto di esclusiva su di essi, usati come mezzo per descrivere il protocollo. Questo perché negli Stati Uniti è necessario che i marchi registrati siano sempre usati in forma di aggettivo, mai di nome o verbo. Con un uso improprio di un marchio registrato, o permettendo ad altri di usare un marchio registrato non correttamente, si ha la riduzione del marchio stesso a termine generico, come per esempio Kleenex o Aspirina; cosa che apre l'utilizzazione del marchio a terzi, attraverso il pubblico dominio.
Nella discussione del contenzioso, ci si chiese se fosse il nome "ssh" ad essere registrabile, oppure solamente il logo formato dalle lettere minuscole "ssh"; inoltre pareva quantomeno strano che fossero trascorsi ben 6 anni tra la creazione dell'azienda di Ylönen e il momento in cui cominciò a rivendicare diritti sul marchio registrato, a sfavore di alternative libere come OpenSSH; e che solo OpenSSH ricevesse minacce di ripercussioni legali per la propria opera.
Sia gli sviluppatori di OpenSSH che lo stesso Ylönen erano membri del working group IETF sul nuovo standard; gruppo di lavoro che, dopo diverse sedute, respinse la richiesta di Ylönen di rinominare il protocollo, esprimendo la propria preoccupazione per il pericolo di creare cattivi precedenti a favore di altre acquisizioni di marchi registrati contro l'IETF. I partecipanti al working group decisero che sia Secure Shell che SSH erano termini generici e che non potevano essere marchi registrati.

## Portabilità

Poiché OpenSSH deve supportare l'autenticazione, una funzione che ha svariate implementazioni nei diversi sistemi operativi, necessita di una infrastruttura per la portabilità. Piuttosto che includerla direttamente all'interno di OpenBSD o OpenSSH, viene sviluppata separatamente come sotto progetto dal OpenSSH Portability Team, e rilasciata come "portable releases". Questo modello viene utilizzato anche per altri progetti BSD come OpenNTPD.

## Programmi inclusi

La suite OpenSSH include le seguenti utilità:
* ssh, un rimpiazzo per rlogin e telnet:
    ssh nomeutente@example.com
* SCP, un rimpiazzo rcp:
    scp nomeutente@example.com:~/somefile .
* SFTP, la versione sicura di ftp:
    sftp nomeutente@example.com
* sshd, il demone SSH:
    sshd

## Autenticazione

Il server OpenSSH può autenticare gli utenti attraverso i seguenti sistemi in esso contenuti:
* chiave pubblica
* password e challenge-response con interazione da tastiera
* Kerberos / GSSAPI.

### Chiave pubblica

Il metodo a chiave pubblica si basa sulla crittografia asimmetrica. Per utilizzarlo l'utente genera una coppia di chiavi. La chiave pubblica è copiata sul server, tipicamente in un apposito file nella home directory dell'utente; la chiave privata deve essere conservata dall'utente, ed è bene che sia protetta con una parola chiave (passphrase).
Per poter creare la coppia di chiavi generalmente si lancia il seguente comando nel terminale:
Questo comando ha vari argomenti, per esempio per specificare l'algoritmo di cifratura, tra rsa (RSA) (sia per le versioni 1 e 2 di ssh) e dsa (DSA]) (solo per la versione 2 di ssh) e altri. La notazione per attivare queste opzioni è ssh-keygen -t [tipo di cifratura].
Il comando chiederà in quale cartella salvare le due chiavi. Se non viene specificato nulla viene presa quella predefinita nella propria cartella utente. quella pubblica avrà l'estensione .pub e poi vi chiederà una passphrase possibilmente lunga.
Nella fase di accesso, il client ssh prova al server di essere in possesso della chiave privata, e in caso di successo viene consentito l'accesso. In questo modo, all'utente non è richiesto di fornire la propria password ad ogni connessione.
Un modo per semplificare l'accesso senza chiedervi la passphrase è quella di delegare ad un agente l'uso di questa tramite il comando ssh-add.
Inoltre, OpenSSH può spesso fare uso di metodi di autenticazione aggiuntivi disponibili nel sistema operativo in cui viene installato. Questi includono il sistema di autenticazione proprio di BSD (bsd_auth) oppure PAM per abilitare l'autenticazione attraverso metodi come one-time password.
Uno sfortunato effetto collaterale nell'uso di PAM come modulo di autenticazione è che in questo caso OpenSSH deve essere eseguito come utente root, visto che i privilegi da amministratore sono tipicamente richiesti per operare con PAM. Le versioni di OpenSSH successive alla 3.7 permettono che l'uso di PAM venga disabilitato a runtime, di modo che gli utenti regolari possano eseguire proprie istanze di server sshd.

## X forwarding

L'X forwarding permette di vedere sul proprio monitor le applicazioni che sono state lanciate sulla macchina remota. Il nome deriva dal fatto che il gestore delle finestre storicamente era l'X Window System.
Sulla macchina remota deve essere abilitata la voce X11Forwarding nel file /etc/ssh/sshd_config apponendo il valore yes (ricordatevi di riavviare il server una volta apportata la modifica al file di configurazione) mentre sulla propria macchina basterà lanciare ssh passando l'opzione -X.