Dans ce chapitre vous découvrirez comment vous connecter à un serveur distant en SSH et comment le configurer correctement.
Afin de déployer l'application sur un serveur, il faut déjà l'acheter ! Pour l'instant vous n'avez pas besoin de la puissance d'un ordinateur entier, vous pouvez donc opter pour un hébergement mutualisé. Concrètement, cela signifie que vous réservez une petite partie d'un serveur.
Digital Ocean est une entreprise de Cloud Computing qui offre de nombreux services. Simple d'utilisation, elle propose des serveurs à des prix très raisonnables. Pour les besoins de ce cours, je réserverai un serveur à 5$ par mois.
Commencez par vous créer un compte puis connectez-vous à l'interface d'administration.
Création du serveur
Un espace serveur s'appelle un "Droplet" dans le jargon de Digital Ocean. Pour en réserver un, cliquez sur "Create Droplet".
La plateforme vous invite à sélectionner plusieurs options :
Image : Digital Ocean peut installer, à votre place, le système d'exploitation de votre choix.
Taille : caractéristiques du serveur à réserver. Vous choisissez l'espace alloué à votre application : la mémoire vive (CPU), la RAM et la bande passante. Sélectionnez l'option la moins chère pour l'exercice.
Ajouter un bloc de stockage : laissez vide, vous n'en avez pas besoin.
Localisation des serveurs : sélectionnez Amsterdam ou Londres. Le serveur doit être le plus proche possible des utilisateurs finaux.
Enfin, Digital Ocean vous demande la clé publique. Si vous en avez déjà une, regardez dans le répertoire Users/vous/.ssh
et copiez la clé présente dans le document id_rsa.pub
.
$ cd /Users/celinems/.ssh/
$ cat id_rsa.pub
Puis collez ce code dans Digital Ocean et, enfin, choisissez un nom de serveur.
Cliquez sur Suivant puis attendez que le droplet soit créé !
Activer le pare-feu (Firewall)
Un pare-feu, Firewall en anglais, est un logiciel qui détermine les connexions autorisées dans un réseau. Vous pouvez ainsi dire : "Mon réseau peut recevoir les requêtes en SSH mais pas en HTTP".
Dans le cas d'une application Django, il est intéressant de ne donner que deux méthodes d'accès : SSH et HTTP. Ainsi, les personnes externes voulant se connecter à la base de données (qui est sur un autre port) ne pourront pas le faire !
Il est très simple d'activer un pare-feu sur Digital Ocean ! Dans l'interface d'administration, cliquez sur Networking > Firewalls > Create firewall.
Les règles de réception, ou Inbound Rules, spécifient les sources de trafic autorisées en fonction des ports. Si aucune source de trafic n'est permise, tout le trafic entrant sera refusé.
Concrètement, aucune requête HTTP ne pourra être réalisée sur le serveur. Un peu problématique pour une application Django !
Dans Inbound Rules, sélectionnez SSH (port 22) et HTTP (port 80).
Ajoutez le nom de votre droplet dans "Apply to Droplets" et cliquez sur "Create Firewall".
Connexion en SSH
Via l'utilisateur Root
Comment vous connecter au serveur ? Nous allons le faire via SSH, un programme informatique et un protocole de communication sécurisé. Concrètement, vous allez interagir avec le serveur distant via votre console.
La commande est ssh
, suivie du nom d'utilisateur et de l'adresse IP. Cela ne vous parle pas ? C'est normal. :)
Commençons par l'utilisateur. Digital Ocean a créé un utilisateur unique qui a tous les droits sur le serveur. Il peut tout faire ! Il s'appelle root
.
L'adresse IP, elle, est l'identifiant unique du serveur virtuel sur Internet. Revenez à Digital Ocean : elle figure dans l'interface d'administration.
Connectez-vous en ssh en tapant la commande root@IPDUSERVEUR
.
Par exemple :
$ ssh root@178.62.117.192
The authenticity of host '178.62.117.192 (178.62.117.192)' can't be established.
ECDSA key fingerprint is SHA256:zNopc54JCaopqPC0TXb8NtOzc3sEbj7B6Ekby92UARI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '178.62.117.192' (ECDSA) to the list of known hosts.
Étant donné que vous vous connectez pour la première fois, le serveur ne vous connaît pas encore. Il affiche donc un message d'étonnement. Pour vous connecter, tapez yes
.
Puis le message d'accueil suivant apparaît :
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
root@disquaire:~#
Vous êtes désormais dans le serveur ! Youhou !
Via un nouvel utilisateur
Comme vous pouvez le voir, l'invite de commande ne commence pas par $
mais par #
. Pourquoi ? Car vous êtes super utilisateur. Créez un utilisateur ayant des droits restreints en tapant la commande adduser
puis en renseignant les différentes valeurs demandées.
root@disquaire:~# adduser celinems
Adding user `celinems' ...
Adding new group `celinems' (1000) ...
Adding new user `celinems' (1000) with group `celinems' ...
The home directory `/home/celinems' already exists. Not copying from `/etc/skel'.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for celinems
Enter the new value, or press ENTER for the default
Full Name []: Celine
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Le compte utilisateur est désormais créé et ce dernier bénéficie de privilèges normaux. Cela signifie qu'il ne peut pas faire de tâches importantes comme installer certains logiciels.
Nous pouvons bien sûr conserver le super utilisateur pour effectuer les tâches importantes et l'utilisateur normal pour les autres, mais cela peut être assez fastidieux de faire l'aller-retour.
Pour éviter cela, vous pouvez ajouter l'utilisateur au groupe des super utilisateurs (sudo). Cela lui permettra d'utiliser la commande sudo
.
root@disquaire:~# gpasswd -a celinems sudo
Adding user celinems to group sudo
Allez, on y est presque !
Lorsque vous avez réservé le droplet sur Digital Ocean, vous avez entré votre clé publique. Le logiciel l'a associée au compte root
pour vous permettre de vous connecter en SSH avec cet utilisateur. Mais qu'en est-il de votre nouvel utilisateur ? Pour le moment, aucune clé ne lui est reliée. Un peu dommage, n'est-ce pas ?!
Ajoutez donc dès maintenant la clé publique dans le répertoire dédié à l'utilisateur.
Dans le serveur, commencez par déclarer que vous êtes le nouvel utilisateur :
root@disquaire:~# su - celinems
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
celinems@disquaire:~$
Bien ! Vous pouvez désormais agir en tant qu'utilisateur ! Remarquez également que vous avez été automatiquement placé dans le répertoire de l'utilisateur et que vous n'êtes plus à la racine de l'ordinateur :
celinems@disquaire:~$ pwd
/home/celinems
Créez le dossier .ssh dans le répertoire de votre utilisateur et changez les permissions d'accès.
celinems@disquaire:~$ mkdir .ssh
celinems@disquaire:~$ chmod 700 .ssh
Créez ensuite un nouveau document pour héberger votre clé publique : authorized_keys
. Collez-y la clé publique copiée précédemment.
Puisque la connexion se fait uniquement via le terminal, vous ne pouvez pas utiliser d'éditeur de texte graphique. Par défaut, Nano et Vim sont installés. Il s'agit d'éditeurs de texte utilisables dans votre console. Pour éditer un fichier de texte avec Vim, utilisez la commande vi nomdufichier
. Comme ceci :
celinems@disquaire:~$ vi .ssh/authorized_keys
Dans Vim, tapez sur la touche esc (échappe) de votre clavier, puis :wq
(write and quit) pour enregistrer les changements et quitter l'éditeur.
Puis changez les permissions d'accès au fichier authorized_keys
et quittez l'utilisateur en tapant exit
:
celinems@disquaire:~$ chmod 600 .ssh/authorized_keys
celinems@disquaire:~/.ssh$ exit
logout
root@disquaire:~#
Vous êtes revenu au super utilisateur !
Étant donné que vous pouvez vous connecter en SSH via le nouvel utilisateur, il est tout à fait inutile de conserver la connexion via le root. Vous pouvez supprimer cette méthode de connexion en modifiant la configuration générale du programme SSH. Elle se trouve dans le document sshd_config
qui regroupe les réglages du programme.
Le dossier etc
regroupe tous les programmes installés dans le serveur et accessibles à tous les utilisateurs. SSH en fait partie !
root@disquaire:~# vi /etc/ssh/sshd_config
Puis trouvez la ligne PermitRootLogin yes
. Elle spécifie que la connexion par l'utilisateur Root est possible. Remplacez yes
par no
.
PermitRootLogin no
Il faut recharger le programme afin que les changements soient pris en compte. Tapez la commande suivante :
root@disquaire:~# service ssh reload
Tester que tout fonctionne
Ne vous déconnectez pas tout de suite ! Si vous le faites et que la configuration de l'autre utilisateur est erronée, vous risquez de rester dehors pour toujours ! 😭
Afin d'éviter cela, ouvrez un nouveau terminal pour vérifier que tout fonctionne. Connectez-vous en tapant la commande ssh nomutilisateur@IP
.
ssh celinems@178.62.117.192
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
celinems@disquaire:~$
Tout fonctionne !! \o/