Strumenti Utente

Strumenti Sito


howto:ssh

SSH

SSH è uno strumento che usiamo per collegarci ai server direttamente dai nostri pc.

La sintassi di base è ssh username@host, ad esempio ssh root@lilik.it.

Per evitare di scrivere ogni volta lo stesso comando è possibile creare una scorciatoia aggiungendo al file ~/.ssh/config queste righe.

Host lilik
         User username
         HostName lilik.it

In questo modo dando il comando ssh lilik questo verrà trasformato in ssh username@lilik.it.

È possibile usare l'autenticazione a chiave pubblica, che evita di dover scrivere la password ogni volta.

'ssh user@hostname -i /path/to/key'

Oppure usando un file di configurazione in cui è possibile memorizzare le opzioni da passare da linea di comando

~/.ssh/config
Host lilik
         User username
         HostName lilik.it
         # segnala quale chiave usare
         IdentityFile ~/.ssh/id_lilik
         # segnala che il server accetta solo l'autenticazione
         # a chiave pubblica
         IdentitiesOnly yes

LILiK a chiave pubblica

Le chiavi che verranno firmate sono del tipo ed25519.

Generare una coppia di chiavi

Usiamo il programma ssh-keygen per generare la vostra coppia di chiavi con questi parametri:

  • -t ed25519
  • -b 4096
  • -f ~/.ssh/id_lilik

Che impongono il tipo corretto, la grandezza dei numeri primi usati e il file in cui la chiave verrà salvata

Il file ~/.ssh/id_lilik.pub contiene la vostra chiave pubblica che potete esportare su un server remoto, il file ~/.ssh/id_lilik contiene la vostra chiave privata che NON DOVETE IN ALCUN MODO PUBBLICARE.

ssh-copy-id

Uno strumento per copiare la vosta chiave pubblica sul server del lilik è il programma ssh-copy-id.

Per copiare la chiave pubblica sul server date il comando ssh-copy-id -i ~/.ssh/id_lilik username@host

Terminare una sessione correttamente

Per uscire da una sessione ssh è possibile usare il comando exit o analogamente la combo Ctrl + d.

Per uscire da una sessione ssh in cui avete perso la connessione con il server date questi due comandi ~ e quindi ., i comandi disponibili sono:

~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Certificati ssh

La CA del LILiK può firmare la chiave pubblica ssh di un utente per permettergli di loggarsi ai server come un utente specifico.
Nel caso risulti necessario avere più di un certificato per la stessa chiave ssh (e quindi avere la possibilità di loggarsi con più di un utente) si possono usare link simbolici e la direttiva IdentityFile.
Supponiamo di avere i seguenti file in ~/.ssh:

  • id_ed25519 (chiave privata)
  • id_ed25519-cert.pub (certificato per l'utente 1)
  • id_ed25519.2-cert.pub (certificato per l'utente 2)

Creiamo un link simbolico per la chiave del secondo certificato:

ln -s ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.2

E aggiungiamo in .ssh/config

IdentityFile ~/.ssh/id_ed25519
IdentityFile ~/.ssh/id_ed25519.2

Usare più certificati con Ansible

Al momento gli esperimenti ci hanno dimostrato che

  • possiamo avere diversi private_key_file nell'inventory, nelle variabili per un task, playbook o role ma ansible non rispetta questa richiesta.

L'unico modo che ha avuto successo è stato associare delle identità alla chiave ssh che si vuole usare dal file di configurazione di ssh

L'ordine è importante visto che sshd prende il nome utente che si logga dal certificato. Se lilik-root fosse prima di lilik-request al momento del login con l'utente request sshd mi farebbe fare l'accesso come root, come richiesto dal certificato di cui si fida.

IdentityFile ~/.ssh/lilik-request # chiave e certificato usato con  l'utente request
IdentityFile ~/.ssh/lilik-root # chiave e certificato usato con l'utente root

Tutte queste considerazioni sono da esplorare con paramiko l'implementazione di ssh che viene proposta da ansible.

howto/ssh.txt · Ultima modifica: 2017/11/11 18:30 da edoput