Secure Shell Tutorial
Iniziare con Secure Shell
Ricerca…
Osservazioni
SSH (Secure Shell) è un protocollo crittografico per la comunicazione point-to-point su una rete non protetta (Internet). Obsoleta i vecchi protocolli usati in passato ( rlogin , rsh , telnet ).
Viene comunemente utilizzato per connettersi a server remoti, macchine virtuali o container nel data center o nel cloud privato (google compute engine, AWS, ...). Ma è anche comunemente usato in combinazione con git per accedere e aggiornare il tuo repository in modo sicuro e semplice usando le chiavi pubbliche invece delle password.
Dovrebbe anche menzionare qualsiasi argomento di grandi dimensioni all'interno di ssh e collegarsi agli argomenti correlati. Poiché la documentazione di ssh è nuova, potrebbe essere necessario creare versioni iniziali di tali argomenti correlati. FARE
Versioni
| Versione | Note di rilascio | Data di rilascio |
|---|---|---|
| OpenSSH 7.3p1 | Ultima versione | 2016/08/01 |
| OpenSSH 7.2p2 | 2016/03/09 | |
| OpenSSH 7.1p2 | 2016/01/14 | |
| OpenSSH 7.1 | 2015/08/21 | |
| OpenSSH 7.0 | 2015/11/08 | |
| OpenSSH 6.9 | 2015/07/01 | |
| OpenSSH 6.8 | 2015/03/18 |
Installazione o configurazione
Versione gratuita dell'implementazione del protocollo SSH, OpenSSH è disponibile in tutte le distribuzioni Linux. Consiste dei pacchetti server e client.
Installazione
Su Linux basato su Debian, è possibile installare openssh utilizzando
# apt-get install openssh-server openssh-client
Su RHEL / CentOS devi usare yum :
# yum install openssh-server openssh-clients
Fedora attuale sta usando dnf invece di yum .
Su Arch Linux, usa pacman:
# pacman -S openssh
Su OSX, openssh dovrebbe essere già installato.
Se si desidera utilizzare la versione più recente, è necessario installare openssh da brew:
# brew install openssh --with-brewed-openssl --with-keychain-support
Istruzioni TODO per Windows
Impostare
Il client openssh non ha bisogno di alcuna configurazione speciale ed è pronto per l'uso subito dopo l'installazione. Si può provare a eseguire il ssh remote , dove il remote è l'host remoto che esegue il server ssh .
Il server openssh viene in genere avviato dopo l'installazione e viene applicata l'impostazione predefinita. In caso contrario, è possibile avviarlo su sistemi basati su systemd utilizzando
Su Linux basato su Debian con systemd:
# systemctl start ssh
Su RHEL / CentOS / Fedora e Arch Linux:
# systemctl start sshd
O sui sistemi upstart che utilizzano
# service sshd start
Configurazione
L' openssh ha i file di configurazione in /etc/ssh/ . Il client sta anche leggendo la configurazione del client in ~/.ssh/config . Il server utilizza un file sshd_config , che contiene la maggior parte dei valori predefiniti e contiene coppie chiave-valore semplici. Esempio:
Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
Creazione della chiave SSH
Puoi creare la tua chiave ssh usando ssh-keygen, è un programma che fa parte dell'installazione ssh. Per farlo basta eseguirlo e seguire le istruzioni sullo schermo.
Ecco un esempio:
$ ssh-keygen
Generating public/private rsa key pair.
La directory predefinita in cui la coppia di chiavi ssh verrà salvata si trova nella cartella .ssh nella tua home directory (puoi cambiarla specificando un percorso valido) e il nome predefinito per la coppia di chiavi è id_rsa per la chiave privata e id_rsa.pub per la chiave pubblica:
Enter file in which to save the key (/home/nasreddine/.ssh/id_rsa): /home/my_folder/my_ssh_key
È possibile proteggere la chiave SSH dall'uso non autorizzato immettendo una password. Questo è facoltativo ma è consigliabile utilizzare una passphrase. Nota che, come con qualsiasi altro programma di comando, quando inserisci la tua passphrase non mostra nulla sullo schermo ma è in fase di registrazione:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Una volta inserita la passphrase, ssh-keygen genererà una chiave e la salverà nel percorso che hai scelto:
Your identification has been saved in /home/my_folder/my_ssh_key.
Your public key has been saved in /home/my_folder/my_ssh_key.pub.
Sono stati fatti. Ora la nostra chiave ssh è pronta per l'uso.
Come SSH in una macchina
Per accedere all'account di un utente sulla macchina con SSH puoi usare il comando ssh username@ip_address . Richiederà una password. Se si digita la password corretta, si verrà connessi alla shell di quell'utente su quella macchina. Altrimenti richiederà nuovamente la password.
Per esempio
root@dev10:~# ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-31-generic x86_64)
Last login: Fri Jul 22 18:33:27 2016 from 10.11.50.10
root@dev2:~#
Se si desidera utilizzare una chiave ssh specifica per connettersi a una macchina, utilizzare ssh -i /path/to/ssh_secret_key username@host
Quando ti connetti a una macchina per la prima volta, ti verrà chiesto di verificare l' impronta digitale della macchina di destinazione. Questo è un meccanismo di sicurezza per evitare un attacco man-in-the-middle . È possibile visualizzare l'impronta digitale della macchina di destinazione immettendo questo comando nella macchina di destinazione.
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Puoi digitare "si" se entrambi sono uguali. Si procederà alla richiesta della password.
Esempio:
root@dev10:~# ssh [email protected]
The authenticity of host '10.11.50.3 (10.11.50.3)' can't be established.
ECDSA key fingerprint is dd:a3:de:cd:5b:01:cd:0b:b6:bc:b3:09:c2:c8:1a:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.11.50.3' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~#
Aggiunta della chiave pubblica all'elenco delle chiavi autorizzate dell'utente del server
Per ssh su un server, la chiave pubblica della tua identità deve essere aggiunta all'elenco delle chiavi affidabili. Più comunemente questo viene fatto per utente:
ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>
Che può anche essere fatto manualmente:
cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
Dopo aver fatto ciò, dovresti essere in grado di accedere senza bisogno di fornire la password dell'utente quando si passa il file di identità alla chiamata ssh .
Connessione dallo script tramite password
Quando è veramente necessario scrivere una connessione ssh , la piping della password nel comando ssh non funziona ( echo passw0rd | ssh host ). È perché la password non viene letta dallo standard input, ma direttamente da TTY (teleprinter, teletypewriter, Teletype per ragioni storiche).
Ma esiste sshpass strumento sshpass che risolve questo problema. Può leggere la password da parametro, file o variabile di ambiente. Ma nota che nessuna di queste opzioni non soddisfa i requisiti di sicurezza per le password!
$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host
Le opzioni della riga di comando possono essere viste da altri utenti in ps (durante il runtime è mascherata, ma non durante l'ora di inizio e non puoi fare affidamento su di essa):
... 23624 6216 pts/5 Ss Aug30 0:00 \_ /bin/bash
... 12812 1988 pts/5 S+ 08:50 0:00 | \_ sshpass -p passw0rd ssh host
... 45008 5796 pts/15 Ss+ 08:50 0:00 | \_ ssh host
Nota che le variabili environmnet di un processo sono accessibili anche da altri processi sul sistema usando /proc/PID/environ file /proc/PID/environ .
Infine, la memorizzazione della password nel file potrebbe sembrare la migliore idea possibile, ma usare i tasti come descritto negli altri esempi è il modo preferito di usare ssh .
File di configurazione
I file di configurazione OpenSSH vengono utilizzati per la configurazione che deve essere applicata ogni volta che viene eseguito il client ssh. La maggior parte delle opzioni della riga di comando è possibile inserire i file di configurazione.
OpenSSH utilizza la configurazione dalle seguenti origini nell'ordine:
- Opzioni della riga di comando
- File di configurazione dell'utente
~/.ssh/config - File di configurazione del sistema
/etc/ssh/ssh_config
Le opzioni di configurazione sono elencate una per una nei file di configurazione.
# This is a comment.
# Parameter can be specified like this, separated with white space.
StrictHostKeyChecking ask
# Or parameter key and value may be separated with white space and =.
ForwardX11 = yes
# The parameter value can be quoted if it contains white space.
IdentityFile "/file system/path with/white space"
L'elenco completo dei parametri di configurazione possibili è disponibile qui .
Una delle funzionalità più utili del file di configurazione è che può essere sezionato in base al nome o all'indirizzo dell'host. In questo modo puoi avere diverse configurazioni per diversi host.
# Based on host name.
Host host1.domain.com
User user1
Host host2.domain.com
User user2
# Or wildcard matching name or ip.
Host *elastic-cloud.com 10.201.4.?
User user3
Ssh-agent
Se è stata impostata una passphrase lunga e non si desidera continuare a inserirla ogni volta che si desidera connettersi al server, è possibile utilizzare SSH-Agent per memorizzare la passphrase mentre si è connessi al computer.
Avvia lo ssh-agent in background:
eval "$(ssh-agent -s)"
# Agent pid 59566
E aggiungi la tua chiave allo ssh-agent, ti verrà richiesto di inserire la tua passphrase:
ssh-add ~/.ssh/matrix.ac
# Enter passphrase for /home/osaka/.ssh/matrix.ac:
# Identity added: /home/osaka/.ssh/matrix.ac (/home/osaka/.ssh/matrix.ac)
Fatto. Ora connettiti con ssh [email protected] e non dovresti inserire la passphrase. È possibile estendere questo utilizzando programmi come gnome-keyring / seahorse, portachiavi e altri gestori chiave.
