Si vous utiliser une application sur votre téléphone qui se connecte à une machine en utilisant le protocole ssh, en général vous aurez la possibilité de vous identifier en utilisant un mot de passe mais en également en utilisant une clé ssh.
Vous serez sans doute tentĂ©s dâutiliser votre pair de clĂ©s que vous avez probablement dĂ©jĂ sur votre ordinateur personnel.
Pour des raisons de sĂ©curitĂ© ce nâest pas une bonne idĂ©e: si vous perdez votre tĂ©lĂ©phone, votre clĂ© privĂ©e pourrait ĂȘtre compromise.
Je vais mâappuyer sur deux applications Android utilisant le protocole ssh.
-
ConnectBot
ConnectBot
ConnectBot est un client Secure Shell pour Android qui vous permet de vous connecter à des serveurs distants via une liaison sécurisée.
ConnectBot est un client ssh et telnet, et un émulateur de terminal pour le shell local. Supporte sessions multiples, y compris leur exécution simultanée.
- ConnectBot est disponible sur f-droid.
- Site Web
- Code source
ConnectBot est assez basique, mais il offre la possibilitĂ© de crĂ©er la paire de clĂ©. Lâapplication garde la clĂ© privĂ©e secrĂšte et vous donne la possibilitĂ© dâexporter la clĂ© publique. Cette fonctionnalitĂ© peut sembler ĂȘtre un gadget, mais elle incite lâutilisateur Ă gĂ©nĂ©rer correctement la sĂ©curitĂ©.
Vous nâaurez alors quâĂ importer la clĂ© publique vers les machines que vous souhaitez contrĂŽler.
-
Raspi Check
Raspi Check
Raspi Check permet de voir lâĂ©tat actuel du systĂšme dâun ordinateur Raspberry Pi. Pour cela, RasPi Check utilise une connexion ssh.
RasPi Check vous montre des informations sur lâoverclocking (frĂ©quence, tempĂ©rature, volts) et dâautres informations systĂšme (mĂ©moire libre, temps dâexĂ©cution, Ă©tat du disque).
Vous pouvez Ă©galement redĂ©marrer ou arrĂȘter votre Raspberry Pi et envoyer des commandes personnalisĂ©es ! Si vous voulez toujours garder un Ćil sur votre Pi, il y a aussi un widget pour votre Ă©cran dâaccueil.
Tout ce dont vous avez besoin pour que lâapplication fonctionne, ce sont vos identifiants de connexion ssh. Vous pouvez soit vous authentifier par mot de passe ou par clĂ© privĂ©e/publique.
- Raspi Check est disponible sur f-droid.
- Code source
Générer une paire de clés spécifique :
Depuis une machine Linux, vous gĂ©nĂ©rerez votre paire de clĂ© Ă lâaide de ssh-keygen, la syntaxe est la suivante :
ssh-keygen -P '' -b 4096 -f my-key-pair -m PEM -t rsa -C 'Comment'
Détaillons :
-P
: indique le contenu de la phrase secrĂšte. Elle permet de sĂ©curiser la clĂ© elle-mĂȘme. Ici, elle est vide, il nây en a donc pas.-b
: Précise le nombre de bits de la clé. Pour les clésRSA
, je vous encourage Ă utiliser au minimum 2048, voir 4096.-f
: Spécifie le nom de fichier de sortie du fichier de clé.-m
: Spécifie un format de clé pour la génération de clés. Si vous définissez le formatPEM
lors de la gĂ©nĂ©ration dâun type de clĂ© privĂ©e pris en charge, la clĂ© sera stockĂ©e dans le format de clĂ© privĂ©ePEM
traditionnel.-t
: Indique le type de clĂ© que lâon souhaite crĂ©er. DâaprĂšs mon expĂ©rience, cela se rapporte Ă la clĂ© publique qui est créée.-C
: Permet dâajouter un commentaire Ă la clĂ© publique (presque indispensable dĂšs que vous avez plus dâune paire de clĂ©s)
-
Précisions
Les options
-t
et-b
peuvent sembler redondantes, mais-t
indique le type de clĂ© que lâon souhaite crĂ©er (liĂ© Ă lâalgorithme cryptographique) alors que-b
précise le format de la clé (comment les clés sont encodées dans les fichiers). Les formats de clé pris en charge sont :RFC4716
(clé publique ou privée RFC 4716/SSH2),PKCS8
(clé publique PEM PKCS8) ouPEM
(clé publique PEM). Sur Linux Mint, le format par défaut estRFC4716
, mais cela peut-ĂȘtre diffĂ©rents ailleurs, en particulier sur FreeBSD. La dĂ©finition dâun formatPEM
lors de la gĂ©nĂ©ration ou de la mise Ă jour dâun type de clĂ© privĂ©e pris en charge entraĂźnera le stockage de la clĂ© dans lâancien format de clĂ© privĂ©ePEM
.OK, je vous ai perdu.
Pour faire simple, les Linux dérivés de Debian, comme Ubuntu, Linux Mint et Raspberry Pi OS utilise un format de clé « moderne » correspondant à la norme SSH2.
Il semblerait qu'Android (ou au moins les applications que jâai testĂ©es) ne supporte pas la norme SSH2, et il est donc nĂ©cessaire dâutiliser lâancien format de clĂ© qui sâobtient en ajoutant -m PEM
lors de la création de la clé.
Voici comment concrĂštement crĂ©er une paire de clĂ©, dĂ©jĂ Ă©voquer dans đ Comment crĂ©er une clĂ© ssh mais ici on va crĂ©er des clĂ©s en utilisant le format historique :
Pour une clé dans mot de passe :
ssh-keygen -t rsa -b 4096 -m PEM -C "Moi@Tel-PEM" -f "my_phone_pem_id_rsa" -N ''
Pour une clé avec mot de passe :
ssh-keygen -t rsa -b 4096 -m PEM -C "Moi@Tel-PEM-secret" -f "my_phone_pem_pass_id_rsa" -N 'secret'
Heu, lĂ , il est pourri le mot de passe. LâidĂ©e est de mettre une phrase complĂšte, dans la documentation anglaise on parle de « passphrase », donc de phrase secrĂšte.
Importer une clé publique
Maintenant que vous avez votre paire de clĂ©s SSH, lâĂ©tape suivante consiste Ă copier la clĂ© publique sur le serveur ou les machines que vous voulez gĂ©rer.
Voici les paires de clés générées par les commandes précédentes:
my_phone_pem_id_rsa
my_phone_pem_id_rsa.pub
my_phone_pem_pass_id_rsa
my_phone_pem_pass_id_rsa.pub
Le fichier .pub
est la clĂ© publique, câest fichier que contient rien de secret, vous devrez ajouter son contenu dans le fichier ~/.ssh/authorized_keys
Lâautre fichier (qui ne finit pas par .pub
) est votre clé privée à mettre sur votre téléphone uniquement (et éventuellement dans une sauvegarder que vous maintiendrez en lieu sûr).
-
Utilisation de ssh-copy-id
Le moyen le plus simple et le plus recommandĂ© pour copier la clĂ© publique sur le serveur distant est dâutiliser lâoutil ssh-copy-id.
ExĂ©cutez la commande suivante sur votre machine locale ; qui vous demandera le mot de passe de lâutilisateur distant :
ssh-copy-id utilisateur_distant@adresse_ip -i fichier_rsa_id
Une fois lâutilisateur authentifiĂ©, le contenu du fichier de clĂ© publique (
fichier_rsa_id.pub
) sera ajouté au fichier~/.ssh/authorized_keys
de lâutilisateur distant, et la connexion sera fermĂ©e.
-
Sans l'utitilitaire ssh-copy-id
Si lâutilitaire ssh-copy-id nâest pas disponible sur votre machine locale, utilisez la commande suivante pour copier la clĂ© publique :
cat fichier_rsa_id.pub | ssh utilisateur_distant@adresse_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys".
Les inconvénients de cette solution est que si vous exécuter plusieurs fois cette commande, le fichier sera ajouté plusieurs fois, mais également si le fichier
authorized_keys
est mal formé (il ne finit pas par un saut de ligne), cela ne fonctionnera pas.Par ailleurs notez que ssh-copy-id prend en compte SELinux.
Tester
Pour vérifier que la clé est bien configurée sur le serveur distant, vous pouvez utiliser la syntaxe avant de mettre la clé sur votre téléphone:
ssh -o "IdentitiesOnly=yes" -v -i my_phone_pem_id_rsa pi@192.168.1.108
-o "IdentitiesOnly=yes"
â Permet dâignorer la recherche automatique des clĂ©s (Ă travers le systĂšme de fichier, comme dans lâagent d'authentification. Cela permet de sâassurer que câest bien le fichier dâidentitĂ© que vous avez spĂ©cifiĂ© qui sera utilisĂ© (voirman ssh_config
).-v
â Mode verbeux. Cela permettra de vĂ©rifier quel fichier ou mĂ©thode dâauthentification a Ă©tĂ© utilisĂ©.-i my_phone_pem_id_rsa
â Indique le fichier dâidentitĂ© (clĂ© privĂ©e) pour lâauthentification.pi@192.168.1.108
â Indique la machine (hostname ou ip) vers laquelle aura lieu la connexion. Permet de spĂ©cifier le nom dâutilisateur (par dĂ©faut câest le nom de lâutilisateur courant qui est utilisĂ©): Les syntaxes possibles sont :[user@]hostname
ou la forme URIÂ :ssh://[user@]hostname[:port]
.
Références et plus
- How To Force SSH Client To Use Given Private Key ( identity file )
- How to force ssh to use a specific private key?
- Raspi Check: Private key not working
http://www.delafond.org/traducmanfr/man/man1/ssh-keygen.1.html - SSH: Convert OpenSSH to SSH2 and vise versa
- đ Comment crĂ©er une clĂ© ssh
- How to Set Up SSH Keys on Debian 10
኿