Table des matières

La commande "ssh"

La page de man de ssh.

Générer une clé SSH

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

Générer une clé RSA (obsolète) :

simon@localhost:~$ ssh-keygen -t rsa -b 8192
Generating public/private rsa key pair.

Générer une clé EdDSA (implémentation ed25519) :

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/simon/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/simon/.ssh/id_ed25519.
Your public key has been saved in /home/simon/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:imFAWJVVN0MP8MJbwXgw4CWLcqWbZzQ1elGE8Tnjbgw simon@deb
The key's randomart image is:
+--[ED25519 256]--+
| oo..o=o@@X      |
|..  .= BoBoB     |
|  o + * +.B .    |
|   + + o = o     |
|    = o E .      |
|   . = . +       |
|    . .   +      |
|         .       |
|                 |
+----[SHA256]-----+

On ajoute la nouvelle clé au “ssh-agent” :

simon@localhost:~$ ssh-add .ssh/id_ed25519
Could not open a connection to your authentication agent.
 
simon@localhost:~$ ssh-agent bash
 
simon@localhost:~$ ssh-add .ssh/id_ed25519
Enter passphrase for .ssh/id_ed25519: 
Identity added: .ssh/id_ed25519 (.ssh/id_ed25519)

On envoie à présent la clé sur le serveur :

simon@localhost:~$ ssh-copy-id LOGIN@NOM-DE-DOMAINE.COM
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
LOGIN@NOM-DE-DOMAINE.COM's password: 
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'LOGIN@NOM-DE-DOMAINE.COM'"
and check to make sure that only the key(s) you wanted were added.

Plus qu'à se connecter, sans rentrer de code cette fois :

simon@localhost:~$ ssh LOGIN@NOM-DE-DOMAINE.COM
LOGIN@HOST~$

Changer la passphrase d'une clé SSH

$ cd .ssh/
$ ssh-keygen -f id_rsa -p
Enter old passphrase: 
Key has comment 'rsa w/o comment'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

source (cyberciti.biz)

Empêcher la connexion au serveur par mot de passe

Maintenant qu'on a une clé en ed25519, on peut empêché la connexion par mot de passe.

Éditez le fichier de configuration suivant :

# vim /etc/ssh/sshd_config
(...)
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
(...)

Redémarrez le service SSH.

# systemctl restart ssh

(source : https://www.security-helpzone.com/2018/07/29/ssh-autoriser-uniquement-les-connexions-avec-cle-privee/ )

Redirection de port

Pour accéder à une ressource distante (par exemple, un site web en développement qui tourne en local sur un serveur distant) :

$ ssh -L 4001:localhost:4000 user@192.168.1.44 -p 10145

(source : https://nikolov.fr/2018/08/redirection-de-port-avec-ssh/

Redirection de port à travers un "Jump Host"

Nous voulons nous connecter à une base de données MySQL derrière un “Jump Host”/“Jump Server”.

3 machines donc :

$ ssh -L 3306:192.168.1.20:3306 $USER@192.168.1.10 -NnT
 
$ mysql -u USER-DB -p -h 127.0.0.1
mysql> 

Ignorer la vérification du host

Ce n'est pas forcément une bonne idée… Mais on a pas toujours le choix (par exemple pour lancer une commande ssh depuis un script…).

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@192.168.0.100

(source : https://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html )

Problèmes rencontrés

Problèmes de droits

$ ssh hostname
Bad owner or permissions on /home/user/.ssh/config

Il faut avoir les bonnes permissions sur le fichier ~/.ssh/config. Avant :

$ ls -alh ~/.ssh/config 
-rwxrwxrwx. 1 user user 324 30 mar  2016 /home/user/.ssh/config

Solution :

$ chmod 600 ~/.ssh/config

Après :

$ ls -alh ~/.ssh/config 
-rw-------. 1 user user 324 30 mar  2016 /home/user/.ssh/config

sshpass

sshpass permet de passer un mot de passe à ssh directement depuis la ligne de commande.

sshpass -p "MotDePasse" ssh LOGIN@10.203.47.58

C'est pas très élégant parce que le mot de passe se retrouve affiché en clair sur le terminal et dans l'historique. Pensez à nettoyer! On peut s'en servir pour envoyer sa clé SSH sur une série de serveurs, par exemple :

for i in {12..42}; do sshpass -p "MotDePasse" ssh-copy-id -i ~/.ssh/id_rsa.pub LOGIN@10.203.47.$i; done

Exemples et astuces