Changements récents - Rechercher:

Espace Wiki ∂'Alembert
Documentation générale


Espace Guide de survie du SysAdmin
Documentation technique


Espace Guide de survie du Développeur
Pour les développeurs


Espace Institut ∂’Alembert
L'institut


Le Site
À propos du Site
Liste complète des Pages


Aide PmWikiFr

Help PmWiki

GSSA /

Secure Shell

Page mise à jour le 19/06/2024 10:32

Vous êtes dans un espace restreint en écriture.



logo OpenSSH

Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur.

Le protocole SSH a été conçu avec l'objectif de remplacer les différents programmes rlogin, telnet, rcp, ftp et rsh.


Utilisation Simple

  • Génération d'une paire de clés:
    $ ssh-keygen -t rsa [-b 4096] [-f ~/.ssh/id_rsa_newkey]

avec en option:

 -b 4096 : taille de la clé
 -f ~/.ssh/id_rsa_newkey : fichier de la clé privée

Voir aussi Windows 10

  • connexion sur la machine M via une passerelle P:
    $ ssh -J login_on_P@P login_on_M@M

Utilisation Avancée

Tunnel SSH

Le but est de faire un tunnel chiffré pour utiliser une autre application depuis ma machine vers une machine non accessible directement.

Comme un exemple vaux mieux qu'un long discours, je veux faire un sftp (port 22) sur la machine nommée dist à travers la passerelle nommée pass

Définitions

Les comptes utilisés:

  • user_pass sur pass
  • user_dist sur dist

les ports:

  • port local : 2222 (ou n'importe quel port abscent de /etc/services)
  • port distant : pour l'application distante, ici sftp = 22

Marche à suivre

  1. créer un tunnel chiffré depuis ma machine localhost, à travers une passerelle pass vers une machine distante dist sur le port 22 (ssh) avec les compte user_pass sur la mache pass et user_dist sur dist.
localhost $ ssh -f -N -L2222:dist:22 user_pass@pass
  1. utiliser le tunnel pour faire, par exemple du sftp avec le compte user_dist de la machine dist
localhost $ sftp -oPort=2222 user_dist@localhost
sftp>

Automatisation

Avec .ssh/config il est possible « d'automatiser » la création de tunnels ssh.

Exemple permettant de voir le site web depuis ma machine leger, en passant par vauban (inaccessible hors laboratoire)::

Host web
Hostname leger.dalembert.upmc.fr
User patrick
ProxyJump patrick@vauban.dalembert.upmc.fr
ForwardAgent No
GSSAPIAuthentication no
LocalForward 8080 www.dalembert.upmc.fr:80
LocalForward 8081 intranet.dalembert.upmc.fr:80

Pour creer les tunnels faites la commandes:

ssh web -N

L'affichage semble figée, c'est nornal. Il faut faire Ctrl-C pour terminer les tunnels et reprendre la main.

Connaitre la clée publique d'une clé privée

$ ssh-keygen -y -f <private key file>

Commande forcée

Une commande forcée est un mécanisme permettant d'executer autre chose qu'un shell après une connexion réussie à un serveur ssh

Mise en place

La mise em place se fait dans le fichier .ssh/authorized. Pour cela, il faut ajouter, avant la clé un texte au genre:

command="ici la commande à executer" ssh-rsa ... (la suite de la clé)

D'autre options sont disponibles. comme par exemple from=":

from="ma.machine.fai" command="echo non non, tu n'as pas le droit de te connecter depuis 'ma.machine.fai'" ...

Ce mécanisme permet une gestion souple et puissante des accès à un compte ssh !

Messages Connus

no matching key exchange method found / no matching host key type found

Le message complet, dans mon exemple est

Unable to negotiate with UNKNOWN port 65535: no matching key exchange method found.
Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1]

ou

Unable to negotiate with UNKNOWN port 65535: no matching host key type found. Their offer: ssh-rsa,ssh-dss

Ces messages indiquent que le client ssh et le serveur ne trouvent pas d'algorithme pour la communication sécurisée. Les algorithmes proposés sont obsolètes.

Pour l'activer, tout de même, il fait ajouter dans .ssh/config sous le host

KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

voir openSSH - Legacy Options « OpenSSH supports this method [NDR diffie-hellman-group1-sha1], but does not enable it by default because it is weak »
voir liste des Key Exchange

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Lorsque l'on réinstalle un serveur Linux et que l'on établit une nouvelle connexion SSH vers celui-ci, on se retrouve souvent avec ce message d'erreur :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
91:22:9d:65:af:ac:03:10:b2:0a:4b:7d:19:1d:60:40.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:1
ECDSA host key for picasso has changed and you have requested strict checking.
Host key verification failed.

Cela signifie que vos clefs SSH ont changé.

Dans ce cas, avant de mettre à jour votre fichier .ssh/known_hosts, il faut vérifier que la fingerprint du serveur est bien le bon.

Deux possibilités à cela:

  • vérification a posteriori sur le serveur
  • vérification a priori avec le DNS

Puis, après vérification on peut, sur la machine cliente, supprimer l'ancienne clé:

ssh-keygen -R adresse-ip-du-serveur

Vérification manuelle

Pour cela, une fois sur la machine, lancer la commande (ici avec la clé ECDSA):

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 91:22:9d:65:af:ac:03:10:b2:0a:4b:7d:19:1d:60:40 root@picasso (ECDSA)

On voit bien que la fingerprint est la même ... ouf :)

Vérification automatique avec le DNS

a tester

voir http://www.phcomp.co.uk/Tutorials/Unix-And-Linux/ssh-check-server-fingerprint.html

Debug

commande permettant de coloriser les log par niveau de debug (le nombre de -v passé en argument)(ici niveau 3)

ssh -vvv modemeca 2>&1 | sed -E "s/(^debug([0-9]):.*)$/\x1b[3\2m&\x1b[m/"

Voir Aussi

À propos du site Licence Creative Commons Cooked with love in 2014-2023 by pcht
Page mise à jour le 19/06/2024 10:32