Table des matières
La commande "ssh"
La page de man de ssh.
Générer une clé SSH
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.
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
- 10145 : Port d'écoute du serveur ssh (optionnel si on a laissé le port à “22”)
- 4001 : Port local sur lequel on veut rediriger le port du serveur
- 4000 : Port distant où tourne le service qu'on peut récupérer en local
(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 :
- La machine locale
- Le Jump Host : 192.168.1.10
- Le serveur qui héberge la base de données : 192.168.1.20(:3306)
$ 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
- Reverse SSH, pour intervenir à distance sur un ordinateur derrière un NAT.