====== 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]]