« SSH » : différence entre les versions
m (a renommé Accès de l'exterieur en Accès SSH par clé publique: Il s'agit d'une procédure plus générale) |
|||
(36 versions intermédiaires par 16 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{Menu tutoriels}} | |||
'''SSH''' (Secure Shell) est un protocole permettant d'obtenir un '''accès Shell''' (ie: ouvrir un terminal de commandes) sur une machine distante en toute sécurité. Il permet d'exécuter des commandes à distance, de copier des fichiers depuis/vers une machine distante, etc. | |||
Nous allons voir ici quelques options intéressantes. | |||
Pour un tutoriel sur comment mettre en place SSH pour utiliser Gitlab sur ton ordinateur Windows, [[Mettre_en_place_SSH_pour_Gitlab|voir le tutoriel spécifique]] | |||
== Accès aux sites internet du plâtal depuis l'extérieur == | |||
Tu peux accéder aux sites visibles normalement uniquement à l'intérieur du plâtal (Chocapix...) depuis n'importe où grâce à un tunnel SSH. La seule exception est fruit. | |||
=== Installation === | |||
==== Firefox ==== | |||
Installer l’extension “Foxy Proxy Standard” sur votre navigateur. Sur Firefox, vous pouvez trouver cette extension sur [https://addons.mozilla.org/fr/firefox/addon/foxyproxy-standard/ ce lien]. | |||
Appuyer sur l’icône Foxy Proxy puis sur options > ajouter. | |||
Sélectionner le type de Proxy SOCKS5, rentrer l’adresse IP 127.0.0.1 et le port 9090. Vérifier que “Send DNS through SOCKS5 proxy” est bien coché. Donner un titre quelconque au proxy. Appuyer sur sauvegarder. Vous pouvez ajouter des modèles, pour que le proxy ne soit activé que sur certains noms de domaines. | |||
==== Chrome & dérivés ==== | |||
L'extension Proxy SwitchyOmega fournit aussi la possibilité de changer de proxy facilement. Configurer avec le protocole SOCKS5, l'host localhost, et le port 9090 (ce dernier n'a pas d'importance, il faut juste qu'il soit identique dans la suite). | |||
==== Safari/Mac ==== | |||
Il n'y a rien besoin d'installer (pas même pour Firefox en fait), il suffit juste d'aller dans les réglages réseau pour activer l'option de proxy. Dans la connexion active (Wi-Fi ou Ethernet suivant le cas), cliquer sur Détails/Avancé puis sur Proxys et enfin cocher Proxys SOCKS. Il suffit alors de rentrer : | |||
* Serveur : 127.0.0.1 | |||
* Port : 9090 | |||
Suivez alors la suite du tutoriel, comme si vous aviez installé puis setup Foxy Proxy. | |||
=== Lancement === | |||
Ouvrir un terminal. Sur Windows, taper cmd dans la barre de recherche windows et appuyer sur entrer | |||
Sur la fenêtre terminal ouverte, taper la commande suivante puis rentrer votre mot de passe (identifiants polytechnique.edu). | |||
ssh -D 9090 prenom.nom@ferrari.polytechnique.fr | |||
où "ferrari" peut être remplacé par le nom de n'importe quel [https://wikix.polytechnique.org/Ordinateurs_des_salles_info ordinateur des salles info]. | |||
Appuyer sur l’icône Foxy Proxy et cliquer sur le proxy nouvellement crée. | |||
C’est bon vous êtes connecté, vous pouvez vérifier que cela a bien fonctionné en allant sur trigramme.binets.fr par exemple | |||
=== Précisions === | |||
Il faut bien laisser la fenêtre de terminal ouverte lorsque l’on utilise le proxy, pour garder la connexion SSH. | |||
Pour arrêter le proxy, il faut bien penser à remettre l’option désactiver sur l’extension Foxy Proxy. | |||
Pour se reconnecter, il suffit de refaire la manipulation décrite dans lancement. | |||
=== Fonctionnement === | |||
Ce proxy permet en fait simplement de faire transiter la connexion internet à travers l’un des ordinateurs de la salle info. Dans ce tutoriel, l’ordinateur ferrari a été utilisé mais on peut prendre n’importe lequel. | |||
Pour les non décrocheurs, qui n'ont plus de compte DSI, suivre la page [[Configuration du proxy]]. | |||
== Clé publique et clé privée== | |||
Il est possible de se connecter via SSH à une machine sans avoir à taper son mot de passe ! | |||
C'est parfois la seule manière de s'y connecter, comme dans le cas des ordinateurs des salles informatiques, qui sont accessibles par ce moyen depuis l'extérieur (hors platal). | |||
=== Mise en place du dossier ssh === | |||
La configuration ssh ainsi que les différentes clés sont à mettre dans le dossier <code>.ssh</code>. Si c'est la première fois que vous configurez ssh sur votre machine, il faudra le créer dans votre dossier utilisateur : | |||
==== Sur Windows ==== | |||
C:/Users/<nom_utilisateur>/.ssh | |||
==== Sur Linux ==== | |||
~/.ssh | |||
ou | |||
/home/<nom_utilisateur>/.ssh | |||
C'est '''dans ce dossier''' qu'il faudra utiliser la commande de génération de clés ssh suivante ! | |||
=== Création de la clé === | |||
En local, sur une machine où l'on est le seul administrateur (machine perso), taper la commande suivante dans un terminal. '''Attention à bien se placer dans le dossier ''.ssh'' avant''' : | |||
ssh-keygen -t ed25519 -C "<commentaire>" | |||
Cette commande va ensuite demander d'entrer plusieurs champs : | |||
* Le nom du fichier dans lequel sauvegarder la clé (= le nom de la clé). Si vous n'entrez rien, la clé générée s'appellera <code>id_ed25519</code> | |||
* Un mot de passe (qu'il vous faudra taper chaque fois que vous utilisez cette clé). Bien que conseillée, cette étape n'est pas nécessaire. Laissez les champs vides pour ne pas associer de mot de passe à la clé générée. | |||
Ceci va générer dans le dossier courant (faites attention à exécuter cette commande dans le dossier .ssh !) un couple clé privée / clé publique, sous la forme de deux fichiers : | |||
* <code>nom_clef.pub</code>, la clé publique qui devra être transmise aux machines / sites (github, gitlab) auxquels vous souhaitez vous connecter. | |||
* <code>nom_clef</code>, la clef privée '''A NE JAMAIS TRANSMETTRE''' | |||
(où <code>nom_clef</code> sera <code>id_ed25519</code> par défaut.) | |||
==== Protéger sa clef ssh avec une clef de sécurité ==== | |||
Si tu as une clef de sécurité ('''Yubikey'''), tu peux créer une clef ssh protégée par celle-ci avec la commande suivante : | |||
ssh-keygen -t ed25519-sk -O verify-required -C "<commentaire>" | |||
L'option <code>-O verify-required</code> permet de rendre obligatoire l'entrée du PIN de la Yubikey lors de l'utilisation de la clef. | |||
Bugs connu: | |||
* Sur Linux Mint 21 : Si les clefs ssh protégées par Yubikey+PIN ne marchent pas mais que les clefs protégées par Yubikey seulement marchent, installer <code>apt install ssh-askpass-gnome ssh-askpass</code> | |||
* Sur Windows : Si les clefs ssh protégées par Yubikey ne marchent pas, mettre à jour <code>OpenSSH</code> en lançant le dernier <code>OpenSSH-Win64-v[...].msi</code> [https://github.com/PowerShell/Win32-OpenSSH/releases ici]. | |||
=== Ajouter une clé ssh à gitlab === | |||
L'un des principaux intérêts des clés ssh est de pouvoir ''cloner'' et ''push'' du code vers un dépôt git distant sans avoir à taper son mot de passe à chaque fois. | |||
==== Copier la clé publique vers gitlab ==== | |||
Copiez l'intégralité du contenu de votre clé publique. Vous pouvez afficher son contenu avec les commandes <code>type id_rsa.pub</code> sur Windows et <code>cat id_rsa.pub</code> sur Linux. Il faut ensuite coller la clé publique sur gitlab, dans l'onglet <code>Profil > Préférences > Clés SSH</code>. | |||
Par défaut, une date d'expiration d'un an est associée à votre clé sur gitlab. | |||
==== Ajouter une configuration locale à git@gitlab.binets.fr ==== | |||
Pour s'assurer que les commandes git utilisent bien la bonne clé ssh, il est souvent nécessaire d'ajouter un '''fichier de configuration ssh''' dans le dossier <code>.ssh</code>. | |||
Créez un fichier <code>config</code> (sans extension !) dans votre dossier ''.ssh''. Voici un template de configuration ssh pour explicitement associer une clé à un hôte : | |||
===== Sous Linux ===== | |||
Host gitlab # Nom de l'hôte | |||
HostName gitlab.binets.fr # Adresse complète de l'hôte : site ou adresse ip | |||
User git # Utilisateur de la clé ssh | |||
IdentityFile ~/.ssh/id_rsa # Adresse de la clé privée à utiliser | |||
===== Sous Windows ===== | |||
Host gitlab.binets.fr # Nom de l'hôte | |||
HostName gitlab.binets.fr # Adresse complète de l'hôte : site ou adresse ip | |||
User git # Utilisateur de la clé ssh | |||
IdentityFile C:\Users\<nom_utilisateur>\.ssh\id_rsa # Clé privée à utiliser, ~/.ssh/id_rsa fonctionne aussi | |||
Vous pouvez ensuite tester votre clé ssh avec la commande suivante : | |||
ssh -T git@gitlab.binets.fr | |||
Vous pouvez reconnaître dans la commande qui permet de cloner un dépôt avec git en ssh : | |||
git@gitlab.binets.fr:br/sigma-frontend.git | |||
<user>@<hôte>:<repo_owner>/<repo_name>.git | |||
=== Export vers les autres machines === | |||
''Note: cette étape n'est pas nécessaire pour se connecter en ssh aux ordinateurs de salle info.'' | |||
La [https://portail.polytechnique.edu/dsi/salles-informatiques/liste-des-ordinateurs liste des ordinateurs de salle informatique] est disponible sur le site de l'école. | |||
Il suffit ensuite de taper la commande suivante, puis de taper votre mot de passe DSI(Synapses, Moodle) : | |||
ssh prenom.nom@allemagne.polytechnique.fr | |||
Dans le cas général, si vous souhaitez vous connecter en ssh vers une autre machine, il faut envoyer le fichier contenant la clé publique (~/.ssh/id_rsa.pub) sur les machines auxquelles on veut se connecter : | |||
==== Avec ssh-copy-id ==== | |||
Cette commande ne fonctionne pas sur windows. Elle demandera le mot de passe utilisateur, pour la dernière fois. | |||
ssh-copy-id login_distant@machine_distante | |||
==== Manuellement ==== | |||
Sur les mac, par exemple, ssh-copy-id n'est pas disponible. Il faut donc rajouter manuellement la clé publique à liste des clés autorisées sur la machine distante en copiant le contenu de ~/.ssh/id_rsa.pub (en local) dans .ssh/authorized_keys (sur la machine distante) : | |||
* sur la machine locale : | |||
scp ~/.ssh/id_rsa.pub login_distant@machine_distante:~ | |||
* sur la machine distante : | |||
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys | cat ~/id_rsa.pub >> ~/.ssh/authorized_keys | ||
=== ssh-agent === | |||
ssh | Il s'agit d'un programme qui vient faciliter l'utilisation des clés privées : en le lançant au début de ta session graphique, il suffit de taper dans un shell | ||
ssh-add | |||
pour qu'il demande la passphrase de la clé privée, puis la charger en mémoire : plus besoin de taper cette passphrase lors d'un SSH ! | |||
Tu peux indiquer par l'option ''-A'' dans ton ssh que tu souhaites ''forwarder'' l'agent : si tu as exporté ta clé publique sur les machines hostA et hostB, alors en faisant | |||
ssh -A hostA | |||
puis, sur hostA | |||
ssh hostB | |||
le second ssh utilisera le ssh-agent qui tourne localement sur ton ordinateur pour récupérer la clé privée et s'authentifier auprès de hostB. Il devient alors intéressant d'utiliser l'option ForwardAgent (cf plus bas) pour pouvoir se balader librement entre les différentes machines. | |||
=== Connection === | |||
Pour se connecter, on tape | |||
ssh login_distant@machine_distante | |||
Si on a lancé le ssh-agent avant (ssh-add), le client ssh va demander la passphrase de la clé, puis établir la connexion. | |||
=== Fonctionnement=== | |||
Lors d'un SSH par clé privée / clé publique | |||
# le serveur ssh va indiquer au client "j'accepte les clés publiques suivantes" en lisant le fichier authorized_keys | # le serveur ssh va indiquer au client "j'accepte les clés publiques suivantes" en lisant le fichier authorized_keys | ||
# mon client va voir qu'il a la clé privée correspondant | # mon client va voir qu'il a la clé privée correspondant | ||
Ligne 19 : | Ligne 183 : | ||
# si la passphrase est bonn, mon client va établir le ssh sans me demander mon mot de passe user | # si la passphrase est bonn, mon client va établir le ssh sans me demander mon mot de passe user | ||
Il est | == Mémorisation de configuration SSH == | ||
Il est possible de configurer SSH pour ne pas avoir à préciser le login ou le nom complet de la machine. | |||
Il faut éditer le fichier ''.ssh/config'' : | |||
Host alias | |||
Hostname nom.complet.de.la.machine | |||
User login_distant | |||
=== Proxy === | |||
On peut également y rajouter les options relatives au Proxy : | |||
ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080 | |||
ou | |||
ProxyCommand connect -H kuzh.polytechnique.fr:8080 %h %p | |||
ou celles relatives au transfert d'agent ssh : | |||
ForwardAgent yes | |||
Ainsi, | |||
ssh alias | |||
sera traduit automatiquement en | |||
ssh -A -o ProxyCommand="socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080" login_distant@nom.complet.de.la.machine | |||
ou | |||
ssh -A -o ProxyCommand="connect -H kuzh.polytechnique.fr:8080 %h %p" login_distant@nom.complet.de.la.machine | |||
=== Passer par un hôte intermédiaire === | |||
On a parfois besoin de se logger en SSH de A sur B pour ensuite se logger de B sur C. Pour automatiser ça, il suffit de mettre ces lignes dans {{c|~/.ssh/config}} | |||
Host C | |||
ProxyCommand ssh login@B -W %h:%p | |||
== La commande <code>scp</code> == | |||
[https://fr.wikipedia.org/wiki/Secure_copy SCP], pour Secure Copy Protocol, est un protocole se basant sur le protocole SSH. Il sert à copier des fichiers entre machines distantes. | |||
Toujours dans la console, la commande suivante te permettra de copier un fichier depuis un hôte ssh distant : | |||
<pre>scp utilisateur@addressedelamachine:fichier/a/copier fichier/de/destination</pre> | |||
<code>fichier/a/copier</code> designe le path du fichier dans le système de fichiers distant, et <code>fichier/de/destination</code> est le path du dossier, sur ''votre'' machine, ou tu veux le copier. | |||
À l'inverse, la commande suivante permet de copier un fichier vers un hôte ssh distant : | |||
<pre>scp fichier/a/copier utilisateur@addressedelamachine:fichier/de/destination</pre> | |||
Pour copier des dossiers, c’est la même option que pour <code>cp</code> : | |||
<pre>scp -r utilisateur@addressedelamachine:dossier/a/copier dossier/de/destination</pre> | |||
== Voir aussi == | |||
[[Acc%C3%A8s_%C3%A0_distance_aux_machines_des_salles_info|Accès à distance aux machines des salles info]] | |||
[[Astuces_ssh|Astuces SSH]] | |||
[[Catégorie:Tutoriels]] |
Version actuelle datée du 19 juillet 2024 à 07:34
- Trucs et astuces du BR
- Diagnostiquer une panne réseau
- Configurer un routeur dans son casert
- Création d'un compte Sigma
- Comment récupérer mes données que j'ai effacées sur mon disque dur ?
- Comment utiliser Git ? (Pour les projets en équipe)
- Comment utiliser SSH ?
- Mettre en place SSH pour Gitlab
- Comprendre les différents identifiants à l'X
- Comment imprimer à l'X ?
SSH (Secure Shell) est un protocole permettant d'obtenir un accès Shell (ie: ouvrir un terminal de commandes) sur une machine distante en toute sécurité. Il permet d'exécuter des commandes à distance, de copier des fichiers depuis/vers une machine distante, etc.
Nous allons voir ici quelques options intéressantes.
Pour un tutoriel sur comment mettre en place SSH pour utiliser Gitlab sur ton ordinateur Windows, voir le tutoriel spécifique
Accès aux sites internet du plâtal depuis l'extérieur
Tu peux accéder aux sites visibles normalement uniquement à l'intérieur du plâtal (Chocapix...) depuis n'importe où grâce à un tunnel SSH. La seule exception est fruit.
Installation
Firefox
Installer l’extension “Foxy Proxy Standard” sur votre navigateur. Sur Firefox, vous pouvez trouver cette extension sur ce lien. Appuyer sur l’icône Foxy Proxy puis sur options > ajouter. Sélectionner le type de Proxy SOCKS5, rentrer l’adresse IP 127.0.0.1 et le port 9090. Vérifier que “Send DNS through SOCKS5 proxy” est bien coché. Donner un titre quelconque au proxy. Appuyer sur sauvegarder. Vous pouvez ajouter des modèles, pour que le proxy ne soit activé que sur certains noms de domaines.
Chrome & dérivés
L'extension Proxy SwitchyOmega fournit aussi la possibilité de changer de proxy facilement. Configurer avec le protocole SOCKS5, l'host localhost, et le port 9090 (ce dernier n'a pas d'importance, il faut juste qu'il soit identique dans la suite).
Safari/Mac
Il n'y a rien besoin d'installer (pas même pour Firefox en fait), il suffit juste d'aller dans les réglages réseau pour activer l'option de proxy. Dans la connexion active (Wi-Fi ou Ethernet suivant le cas), cliquer sur Détails/Avancé puis sur Proxys et enfin cocher Proxys SOCKS. Il suffit alors de rentrer :
- Serveur : 127.0.0.1
- Port : 9090
Suivez alors la suite du tutoriel, comme si vous aviez installé puis setup Foxy Proxy.
Lancement
Ouvrir un terminal. Sur Windows, taper cmd dans la barre de recherche windows et appuyer sur entrer Sur la fenêtre terminal ouverte, taper la commande suivante puis rentrer votre mot de passe (identifiants polytechnique.edu).
ssh -D 9090 prenom.nom@ferrari.polytechnique.fr
où "ferrari" peut être remplacé par le nom de n'importe quel ordinateur des salles info. Appuyer sur l’icône Foxy Proxy et cliquer sur le proxy nouvellement crée. C’est bon vous êtes connecté, vous pouvez vérifier que cela a bien fonctionné en allant sur trigramme.binets.fr par exemple
Précisions
Il faut bien laisser la fenêtre de terminal ouverte lorsque l’on utilise le proxy, pour garder la connexion SSH. Pour arrêter le proxy, il faut bien penser à remettre l’option désactiver sur l’extension Foxy Proxy. Pour se reconnecter, il suffit de refaire la manipulation décrite dans lancement.
Fonctionnement
Ce proxy permet en fait simplement de faire transiter la connexion internet à travers l’un des ordinateurs de la salle info. Dans ce tutoriel, l’ordinateur ferrari a été utilisé mais on peut prendre n’importe lequel.
Pour les non décrocheurs, qui n'ont plus de compte DSI, suivre la page Configuration du proxy.
Clé publique et clé privée
Il est possible de se connecter via SSH à une machine sans avoir à taper son mot de passe !
C'est parfois la seule manière de s'y connecter, comme dans le cas des ordinateurs des salles informatiques, qui sont accessibles par ce moyen depuis l'extérieur (hors platal).
Mise en place du dossier ssh
La configuration ssh ainsi que les différentes clés sont à mettre dans le dossier .ssh
. Si c'est la première fois que vous configurez ssh sur votre machine, il faudra le créer dans votre dossier utilisateur :
Sur Windows
C:/Users/<nom_utilisateur>/.ssh
Sur Linux
~/.ssh
ou
/home/<nom_utilisateur>/.ssh
C'est dans ce dossier qu'il faudra utiliser la commande de génération de clés ssh suivante !
Création de la clé
En local, sur une machine où l'on est le seul administrateur (machine perso), taper la commande suivante dans un terminal. Attention à bien se placer dans le dossier .ssh avant :
ssh-keygen -t ed25519 -C "<commentaire>"
Cette commande va ensuite demander d'entrer plusieurs champs :
- Le nom du fichier dans lequel sauvegarder la clé (= le nom de la clé). Si vous n'entrez rien, la clé générée s'appellera
id_ed25519
- Un mot de passe (qu'il vous faudra taper chaque fois que vous utilisez cette clé). Bien que conseillée, cette étape n'est pas nécessaire. Laissez les champs vides pour ne pas associer de mot de passe à la clé générée.
Ceci va générer dans le dossier courant (faites attention à exécuter cette commande dans le dossier .ssh !) un couple clé privée / clé publique, sous la forme de deux fichiers :
nom_clef.pub
, la clé publique qui devra être transmise aux machines / sites (github, gitlab) auxquels vous souhaitez vous connecter.nom_clef
, la clef privée A NE JAMAIS TRANSMETTRE
(où nom_clef
sera id_ed25519
par défaut.)
Protéger sa clef ssh avec une clef de sécurité
Si tu as une clef de sécurité (Yubikey), tu peux créer une clef ssh protégée par celle-ci avec la commande suivante :
ssh-keygen -t ed25519-sk -O verify-required -C "<commentaire>"
L'option -O verify-required
permet de rendre obligatoire l'entrée du PIN de la Yubikey lors de l'utilisation de la clef.
Bugs connu:
- Sur Linux Mint 21 : Si les clefs ssh protégées par Yubikey+PIN ne marchent pas mais que les clefs protégées par Yubikey seulement marchent, installer
apt install ssh-askpass-gnome ssh-askpass
- Sur Windows : Si les clefs ssh protégées par Yubikey ne marchent pas, mettre à jour
OpenSSH
en lançant le dernierOpenSSH-Win64-v[...].msi
ici.
Ajouter une clé ssh à gitlab
L'un des principaux intérêts des clés ssh est de pouvoir cloner et push du code vers un dépôt git distant sans avoir à taper son mot de passe à chaque fois.
Copier la clé publique vers gitlab
Copiez l'intégralité du contenu de votre clé publique. Vous pouvez afficher son contenu avec les commandes type id_rsa.pub
sur Windows et cat id_rsa.pub
sur Linux. Il faut ensuite coller la clé publique sur gitlab, dans l'onglet Profil > Préférences > Clés SSH
.
Par défaut, une date d'expiration d'un an est associée à votre clé sur gitlab.
Ajouter une configuration locale à git@gitlab.binets.fr
Pour s'assurer que les commandes git utilisent bien la bonne clé ssh, il est souvent nécessaire d'ajouter un fichier de configuration ssh dans le dossier .ssh
.
Créez un fichier config
(sans extension !) dans votre dossier .ssh. Voici un template de configuration ssh pour explicitement associer une clé à un hôte :
Sous Linux
Host gitlab # Nom de l'hôte HostName gitlab.binets.fr # Adresse complète de l'hôte : site ou adresse ip User git # Utilisateur de la clé ssh IdentityFile ~/.ssh/id_rsa # Adresse de la clé privée à utiliser
Sous Windows
Host gitlab.binets.fr # Nom de l'hôte HostName gitlab.binets.fr # Adresse complète de l'hôte : site ou adresse ip User git # Utilisateur de la clé ssh IdentityFile C:\Users\<nom_utilisateur>\.ssh\id_rsa # Clé privée à utiliser, ~/.ssh/id_rsa fonctionne aussi
Vous pouvez ensuite tester votre clé ssh avec la commande suivante :
ssh -T git@gitlab.binets.fr
Vous pouvez reconnaître dans la commande qui permet de cloner un dépôt avec git en ssh :
git@gitlab.binets.fr:br/sigma-frontend.git
<user>@<hôte>:<repo_owner>/<repo_name>.git
Export vers les autres machines
Note: cette étape n'est pas nécessaire pour se connecter en ssh aux ordinateurs de salle info. La liste des ordinateurs de salle informatique est disponible sur le site de l'école.
Il suffit ensuite de taper la commande suivante, puis de taper votre mot de passe DSI(Synapses, Moodle) :
ssh prenom.nom@allemagne.polytechnique.fr
Dans le cas général, si vous souhaitez vous connecter en ssh vers une autre machine, il faut envoyer le fichier contenant la clé publique (~/.ssh/id_rsa.pub) sur les machines auxquelles on veut se connecter :
Avec ssh-copy-id
Cette commande ne fonctionne pas sur windows. Elle demandera le mot de passe utilisateur, pour la dernière fois.
ssh-copy-id login_distant@machine_distante
Manuellement
Sur les mac, par exemple, ssh-copy-id n'est pas disponible. Il faut donc rajouter manuellement la clé publique à liste des clés autorisées sur la machine distante en copiant le contenu de ~/.ssh/id_rsa.pub (en local) dans .ssh/authorized_keys (sur la machine distante) :
- sur la machine locale :
scp ~/.ssh/id_rsa.pub login_distant@machine_distante:~
- sur la machine distante :
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-agent
Il s'agit d'un programme qui vient faciliter l'utilisation des clés privées : en le lançant au début de ta session graphique, il suffit de taper dans un shell
ssh-add
pour qu'il demande la passphrase de la clé privée, puis la charger en mémoire : plus besoin de taper cette passphrase lors d'un SSH ! Tu peux indiquer par l'option -A dans ton ssh que tu souhaites forwarder l'agent : si tu as exporté ta clé publique sur les machines hostA et hostB, alors en faisant
ssh -A hostA
puis, sur hostA
ssh hostB
le second ssh utilisera le ssh-agent qui tourne localement sur ton ordinateur pour récupérer la clé privée et s'authentifier auprès de hostB. Il devient alors intéressant d'utiliser l'option ForwardAgent (cf plus bas) pour pouvoir se balader librement entre les différentes machines.
Connection
Pour se connecter, on tape
ssh login_distant@machine_distante
Si on a lancé le ssh-agent avant (ssh-add), le client ssh va demander la passphrase de la clé, puis établir la connexion.
Fonctionnement
Lors d'un SSH par clé privée / clé publique
- le serveur ssh va indiquer au client "j'accepte les clés publiques suivantes" en lisant le fichier authorized_keys
- mon client va voir qu'il a la clé privée correspondant
- mon client me demander ma passphrase
- si la passphrase est bonn, mon client va établir le ssh sans me demander mon mot de passe user
Mémorisation de configuration SSH
Il est possible de configurer SSH pour ne pas avoir à préciser le login ou le nom complet de la machine.
Il faut éditer le fichier .ssh/config :
Host alias Hostname nom.complet.de.la.machine User login_distant
Proxy
On peut également y rajouter les options relatives au Proxy :
ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080
ou
ProxyCommand connect -H kuzh.polytechnique.fr:8080 %h %p
ou celles relatives au transfert d'agent ssh :
ForwardAgent yes
Ainsi,
ssh alias
sera traduit automatiquement en
ssh -A -o ProxyCommand="socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080" login_distant@nom.complet.de.la.machine
ou
ssh -A -o ProxyCommand="connect -H kuzh.polytechnique.fr:8080 %h %p" login_distant@nom.complet.de.la.machine
Passer par un hôte intermédiaire
On a parfois besoin de se logger en SSH de A sur B pour ensuite se logger de B sur C. Pour automatiser ça, il suffit de mettre ces lignes dans ~/.ssh/config
Host C ProxyCommand ssh login@B -W %h:%p
La commande scp
SCP, pour Secure Copy Protocol, est un protocole se basant sur le protocole SSH. Il sert à copier des fichiers entre machines distantes.
Toujours dans la console, la commande suivante te permettra de copier un fichier depuis un hôte ssh distant :
scp utilisateur@addressedelamachine:fichier/a/copier fichier/de/destination
fichier/a/copier
designe le path du fichier dans le système de fichiers distant, et fichier/de/destination
est le path du dossier, sur votre machine, ou tu veux le copier.
À l'inverse, la commande suivante permet de copier un fichier vers un hôte ssh distant :
scp fichier/a/copier utilisateur@addressedelamachine:fichier/de/destination
Pour copier des dossiers, c’est la même option que pour cp
:
scp -r utilisateur@addressedelamachine:dossier/a/copier dossier/de/destination