====== La commande "ssh" ====== La page de [[man de ssh]]. ===== Générer une clé SSH ===== 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é [[https://fr.wikipedia.org/wiki/EdDSA|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. [[https://www.cyberciti.biz/faq/howto-ssh-changing-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/|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/|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|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 ===== * [[Redirection de l'affichage via X]] * [[Reverse SSH]], pour intervenir à distance sur un ordinateur derrière un NAT. * [[http://links.simonlefort.be/?gmvu_g|Streaming avec mplayer]] * [[https://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html|How to disable ssh host key checking]]