SSH de A à Z

Maîtriser SSH de A à Z – Le Guide Complet


Introduction à SSH

Qu’est-ce que SSH ? Secure Shell (SSH) est un protocole réseau cryptographique pour l’exploitation sécurisée des services réseau sur un réseau non sécurisé. SSH fournit un canal sécurisé sur un réseau non sécurisé en utilisant une architecture client-serveur, se connectant à un serveur SSH via un client SSH. La connexion sécurisée peut être utilisée pour des tâches telles que l’accès aux comptes, l’exécution de commandes à distance, et la gestion des systèmes distants.

Pourquoi SSH est-il important ? SSH est largement utilisé pour l’administration des systèmes distants. Il offre une sécurité accrue par rapport à d’autres protocoles tels que Telnet, car il chiffre toutes les données échangées, y compris les identifiants de connexion.

Fonctionnalités principales de SSH:

  • Chiffrement des données: SSH utilise des algorithmes de chiffrement forts pour protéger la confidentialité des données échangées.
  • Authentification sécurisée: SSH permet une authentification basée sur des mots de passe, des clés publiques, ou même des méthodes plus avancées comme l’authentification à deux facteurs.
  • Transfert de fichiers sécurisé: Utilise SCP (Secure Copy Protocol) ou SFTP (SSH File Transfer Protocol) pour le transfert de fichiers sécurisé entre machines.

1. Commandes SSH – Un Guide Complète

1.1 Connexion SSH de base: La commande SSH de base est utilisée pour se connecter à un serveur distant via le terminal.

  • Syntaxe:bashCopier le codessh [user]@[hostname]
  • Exemple:bashCopier le codessh johndoe@192.168.1.10 Cette commande connecte l’utilisateur « johndoe » au serveur situé à l’adresse IP 192.168.1.10.

1.2 Utilisation des Clés SSH: L’utilisation de clés SSH est recommandée pour une sécurité accrue et une authentification sans mot de passe.

  • Génération de Clé:bashCopier le codessh-keygen -t rsa -b 4096 -C "your_email@example.com" Cette commande génère une paire de clés RSA de 4096 bits.
  • Ajout de la clé publique au serveur distant:bashCopier le codessh-copy-id johndoe@192.168.1.10 Cette commande copie votre clé publique sur le serveur distant pour permettre une authentification sans mot de passe.

1.3 Gestion des connexions multiples: SSH permet de gérer plusieurs connexions simultanées à différents serveurs en utilisant des alias et un fichier de configuration.

  • Configuration dans ~/.ssh/config:bashCopier le codeHost server1 HostName 192.168.1.10 User johndoe IdentityFile ~/.ssh/id_rsa Cet exemple définit un alias « server1 » pour se connecter facilement au serveur spécifié.

1.4 Tunneling SSH: Le tunneling SSH permet de créer des tunnels sécurisés pour des services non sécurisés.

  • Port forwarding local:bashCopier le codessh -L 8080:localhost:80 johndoe@192.168.1.10 Cette commande redirige les connexions locales au port 8080 vers le port 80 du serveur distant.

2. Frameworks et Outils Associés à SSH

2.1 OpenSSH: OpenSSH est la suite la plus utilisée pour l’accès sécurisé au réseau via le protocole SSH. Il inclut des outils pour la connexion à distance, le transfert de fichiers, et bien plus.

  • Fonctionnalités principales:
    • Connexion SSH sécurisée
    • Transfert de fichiers via SCP/SFTP
    • Port forwarding et tunneling

2.2 PuTTY: PuTTY est un client SSH pour Windows qui offre une interface utilisateur graphique pour établir des connexions SSH.

  • Caractéristiques:
    • Supporte SSH, Telnet, et d’autres protocoles de réseau.
    • Gestionnaire de session pour enregistrer et réutiliser les configurations.

2.3 MobaXterm: MobaXterm est un terminal avancé pour Windows qui inclut un client SSH avec de nombreuses fonctionnalités supplémentaires.

  • Avantages:
    • Support de X11 pour l’affichage distant des applications graphiques.
    • Outils intégrés pour SCP, SFTP, et bien plus.

2.4 WinSCP: WinSCP est un gestionnaire de fichiers open-source pour Windows qui supporte SCP et SFTP.

  • Utilisations:
    • Transfert de fichiers sécurisé entre machines Windows et serveurs Linux/Unix.
    • Intégration avec PuTTY pour les connexions SSH.

3. Utilisation de SSH sous Différents Systèmes d’Exploitation

3.1 SSH sous Linux: La plupart des distributions Linux incluent SSH par défaut. Voici les étapes pour utiliser SSH sous Linux.

  • Installation:bashCopier le codesudo apt-get install openssh-client Pour installer le client SSH.
  • Configuration du Serveur SSH:bashCopier le codesudo apt-get install openssh-server sudo systemctl enable ssh sudo systemctl start ssh Ces commandes installent et démarrent le service SSH pour permettre les connexions entrantes.

3.2 SSH sous macOS: macOS inclut SSH par défaut, et vous pouvez facilement utiliser le terminal pour vous connecter à des serveurs distants.

  • Utilisation basique: Ouvrez le Terminal et utilisez la commande SSH comme sous Linux pour se connecter à un serveur distant.
  • Génération de clés SSH:bashCopier le codessh-keygen -t rsa -b 4096 -C "your_email@example.com"

3.3 SSH sous Windows: Historiquement, SSH n’était pas natif sous Windows, mais maintenant Windows 10 et versions ultérieures incluent OpenSSH.

  • Installation via PowerShell:powershellCopier le codeAdd-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 Cette commande installe le client SSH sous Windows.
  • Utilisation avec PuTTY: Si vous préférez une interface graphique, vous pouvez utiliser PuTTY comme client SSH.

4. Commandes Avancées et Astuces pour SSH

4.1 Redirection de Ports avec SSH: SSH peut être utilisé pour rediriger des ports pour accéder à des services derrière des pare-feu.

  • Exemple:bashCopier le codessh -L 5901:localhost:5901 -N -f -l user remote_host Cette commande redirige le port local 5901 vers le même port sur une machine distante, utile pour accéder à des bureaux distants via VNC.

4.2 ProxyJump: ProxyJump est une fonctionnalité d’OpenSSH qui permet de sauter via un hôte intermédiaire pour atteindre la destination finale.

  • Exemple:bashCopier le codessh -J jump_host final_host Cette commande se connecte à final_host en passant par jump_host.

4.3 SSHFS – Monter un Système de Fichiers via SSH: SSHFS permet de monter un système de fichiers distant via SSH.

  • Installation (Linux):bashCopier le codesudo apt-get install sshfs
  • Utilisation:bashCopier le codesshfs user@remote_host:/remote/directory /local/mountpoint

4.4 Astuces de Sécurité:

  • Désactiver l’authentification par mot de passe: Pour plus de sécurité, désactivez l’authentification par mot de passe et n’utilisez que des clés SSH:bashCopier le codesudo nano /etc/ssh/sshd_config PasswordAuthentication no
  • Changer le port par défaut: Changer le port par défaut de 22 à un autre port pour réduire les risques d’attaque:bashCopier le codesudo nano /etc/ssh/sshd_config Port 2222

4.5 Configurations Avancées dans le fichier sshd_config: Le fichier de configuration sshd_config est essentiel pour personnaliser et sécuriser les connexions SSH sur le serveur. Voici quelques options clés :

  • Désactiver les connexions root: Pour empêcher l’accès direct au compte root via SSH, ajoutez cette ligne :bashCopier le codePermitRootLogin no Cela force les administrateurs à se connecter avec un utilisateur normal avant de s’élever en root via sudo.
  • Limiter l’accès SSH à des utilisateurs spécifiques: Pour autoriser uniquement certains utilisateurs à se connecter via SSH, utilisez :bashCopier le codeAllowUsers user1 user2
  • Activer le « Port Knocking »: Le port knocking est une méthode de sécurité où un port SSH n’est ouvert qu’après une série de tentatives de connexion à des ports spécifiques. Bien que cela ne soit pas nativement supporté par SSH, des outils comme knockd peuvent être configurés pour cela.

4.6 Tunneling inversé avec SSH: Le tunneling inversé permet à une machine distante d’accéder à une machine locale via SSH. Cela est utile lorsque vous souhaitez établir une connexion depuis un réseau privé ou derrière un pare-feu.

  • Exemple:bashCopier le codessh -R 8080:localhost:80 user@remote_host Cette commande permet au serveur distant de se connecter au port 8080 de votre machine locale.

4.7 Création de scripts pour automatiser les tâches SSH: Les scripts Bash peuvent automatiser des connexions SSH répétitives ou complexes. Par exemple, pour exécuter une série de commandes sur un serveur distant chaque matin :

bashCopier le code#!/bin/bash
ssh user@remote_host << EOF
cd /var/www
git pull origin master
service apache2 restart
EOF

4.8 Authentification avec agent SSH: L’agent SSH stocke les clés privées en mémoire pour les réutiliser sans avoir à ressaisir la passphrase.

  • Démarrage de l’agent SSH:bashCopier le codeeval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa

5. Comparaison des Systèmes d’Exploitation: SSH sous Windows, macOS, et Linux

5.4 Comparaison des performances SSH entre Windows, macOS et Linux:

  • Linux:
    • Performance: Généralement, Linux offre les meilleures performances SSH en raison de sa nature légère et optimisée pour les serveurs.
    • Avantages: Très personnalisable, ce qui permet des optimisations spécifiques pour des tâches de serveur SSH à grande échelle.
    • Inconvénients: Peut être complexe pour les utilisateurs qui ne sont pas familiers avec la ligne de commande.
  • macOS:
    • Performance: Bien que performant, macOS n’est pas aussi léger que Linux, ce qui peut parfois entraîner des performances légèrement inférieures dans des environnements très intensifs.
    • Avantages: Interface utilisateur plus conviviale et intégration parfaite avec d’autres outils d’Apple.
    • Inconvénients: Moins de flexibilité en termes de configuration par rapport à Linux.
  • Windows:
    • Performance: Avec les nouvelles intégrations OpenSSH dans Windows 10, les performances ont considérablement amélioré. Cependant, certains utilisateurs peuvent toujours rencontrer des problèmes avec des configurations complexes.
    • Avantages: Interface graphique conviviale avec des outils comme PuTTY et MobaXterm.
    • Inconvénients: Moins de support natif pour les scripts avancés et les outils de gestion que Linux.

5.5 Sécurité: Meilleures Pratiques pour Chaque Système

  • Linux:
    • Configuration du sshd_config pour des restrictions strictes.
    • Utilisation de SELinux/AppArmor pour ajouter une couche supplémentaire de sécurité.
    • Surveillance active des journaux via des outils comme Fail2Ban.
  • macOS:
    • Activation de FileVault pour chiffrer l’ensemble du disque, y compris les clés SSH.
    • Utilisation de l’authentification à deux facteurs pour les connexions SSH sensibles.
    • Intégration avec les certificats Apple pour une authentification forte.
  • Windows:
    • Utilisation des politiques de groupe pour renforcer la sécurité SSH.
    • Mise en place de connexions SSH uniquement via des clés publiques et désactivation des mots de passe.
    • Surveillance des connexions via le Journal des événements Windows.

Conclusion: Le Potentiel de SSH dans les Systèmes Multi-Plateformes

SSH s’avère être un outil polyvalent et indispensable pour les administrateurs systèmes et les développeurs, quelle que soit la plateforme utilisée. Que ce soit sous Linux, macOS, ou Windows, SSH permet une gestion sécurisée et efficace des systèmes distants. En combinant les techniques et pratiques avancées mentionnées ci-dessus, vous pouvez non seulement renforcer la sécurité de vos connexions SSH, mais également optimiser la gestion de vos systèmes.

La compréhension approfondie de SSH, combinée à la maîtrise de ses commandes et fonctionnalités avancées, ouvre des possibilités infinies pour l’automatisation, la sécurité, et la gestion de réseaux complexes. Ce guide vise à fournir toutes les informations nécessaires pour devenir un expert dans l’utilisation de SSH, en vous donnant les compétences nécessaires pour résoudre des problèmes complexes et améliorer votre efficacité au quotidien.

En fin de compte, SSH est bien plus qu’un simple outil de connexion. C’est un environnement complet qui, une fois maîtrisé, devient un allié puissant dans votre arsenal technologique, vous permettant de sécuriser, automatiser, et gérer efficacement vos systèmes, quel que soit le système d’exploitation que vous utilisez.


Cette section détaillée devrait servir de référence pour les utilisateurs cherchant à approfondir leurs connaissances sur SSH, offrant des exemples pratiques et des conseils pour son utilisation avancée sous différents systèmes d’exploitation.

Fixation des Cas d’Erreurs Communes avec SSH : Approfondissement et Études de Cas

SSH, ou Secure Shell, est un outil puissant pour administrer des systèmes à distance. Cependant, des erreurs peuvent survenir pour diverses raisons. Cette section approfondit cinq erreurs communes avec SSH, en examinant les cas de figure spécifiques et en fournissant des solutions détaillées étape par étape, accompagnées d’exemples réels.


1. Problème : « Permission Denied (publickey) »

Symptôme : Lors de la tentative de connexion à un serveur via SSH, le message d’erreur « Permission Denied (publickey) » apparaît.

Cas de Figure et Solutions :

Cas 1 : Clé Publique Mal Configurée sur le Serveur

  • Situation : Vous avez récemment configuré un serveur, mais vous recevez une erreur de permission lorsque vous essayez de vous connecter. Vous avez pourtant généré une paire de clés SSH sur votre machine locale.
  • Étape 1 : Génération de la Clé Publique sur la Machine LocalebashCopier le codessh-keygen -t rsa -b 4096 -C "votre_email@example.com" Cela génère une clé publique et une clé privée, généralement dans le répertoire ~/.ssh/.
  • Étape 2 : Copie de la Clé Publique sur le ServeurbashCopier le codessh-copy-id user@remote_host Cette commande ajoute automatiquement votre clé publique au fichier ~/.ssh/authorized_keys sur le serveur.
  • Étape 3 : Vérification des Permissions
    • Sur le Serveur :bashCopier le codechmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
    • Explication : Les mauvaises permissions peuvent empêcher SSH de lire les fichiers nécessaires, entraînant l’erreur « Permission Denied (publickey) ».

Cas 2 : Mauvaise Clé Privée ou Absence de Clé Privée

  • Situation : Vous avez plusieurs clés privées sur votre machine locale et vous ne savez pas laquelle est la bonne.
  • Étape 1 : Spécifier la Clé Privée CorrectebashCopier le codessh -i ~/.ssh/id_rsa user@remote_host Vous spécifiez directement la clé privée à utiliser, évitant ainsi toute confusion.
  • Étape 2 : Débogage avec l’Option -vbashCopier le codessh -v user@remote_host Cela permet de voir quel fichier de clé est utilisé et d’identifier les erreurs plus facilement.

Cas 3 : Problème de Chemin d’Accès Incorrect

  • Situation : Vous avez configuré les clés, mais l’erreur persiste. Le chemin d’accès à la clé publique sur le serveur est peut-être incorrect.
  • Solution :
    • Vérifiez que le chemin vers le fichier authorized_keys est correct et que la clé publique est au bon format.

2. Problème : « Connection Refused »

Symptôme : L’erreur « Connection Refused » apparaît lorsque vous tentez de vous connecter à un serveur SSH.

Cas de Figure et Solutions :

Cas 1 : Service SSH Non Démarré

  • Situation : Vous venez de configurer un nouveau serveur, mais le service SSH n’a pas encore été démarré.
  • Étape 1 : Vérification du Statut du Service SSHbashCopier le codesudo systemctl status sshd Cette commande vous informe si le service SSH est actif ou non.
  • Étape 2 : Démarrage du Service SSHbashCopier le codesudo systemctl start sshd Cela démarre le service SSH si ce n’est pas déjà fait.
  • Étape 3 : Activation du Service au DémarragebashCopier le codesudo systemctl enable sshd Cette commande assure que SSH démarre automatiquement lors du démarrage du serveur.

Cas 2 : Port SSH Bloqué par le Pare-feu

  • Situation : Le service SSH est en cours d’exécution, mais vous recevez toujours une erreur de connexion refusée. Le pare-feu pourrait bloquer le port SSH.
  • Étape 1 : Ouverture du Port SSH
    • Sur un Serveur Ubuntu avec UFW :bashCopier le codesudo ufw allow 22/tcp sudo ufw reload Cela ouvre le port 22 pour les connexions SSH.
    • Sur un Serveur avec iptables :bashCopier le codesudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT Cette commande ajoute une règle pour autoriser les connexions entrantes sur le port 22.

Cas 3 : SSH Écoute sur un Port Non Standard

  • Situation : Pour des raisons de sécurité, le port par défaut de SSH a été changé, mais vous essayez toujours de vous connecter via le port 22.
  • Étape 1 : Identifier le Port SSH Correct
    • Consultez le fichier de configuration SSH /etc/ssh/sshd_config sur le serveur pour vérifier quel port est utilisé :bashCopier le codesudo nano /etc/ssh/sshd_config Recherchez la ligne Port pour identifier le port configuré.
  • Étape 2 : Spécifier le Port Lors de la ConnexionbashCopier le codessh -p <port_number> user@remote_host Utilisez cette commande pour vous connecter via le bon port.

3. Problème : « Too Many Authentication Failures »

Symptôme : L’erreur « Too Many Authentication Failures » se produit après plusieurs tentatives de connexion infructueuses.

Cas de Figure et Solutions :

Cas 1 : Multiples Tentatives avec des Clés Incorrectes

  • Situation : Vous avez plusieurs clés privées et le client SSH essaie toutes les clés avant d’abandonner, ce qui déclenche l’erreur.
  • Étape 1 : Spécification de la Clé CorrectebashCopier le codessh -i ~/.ssh/id_rsa user@remote_host Cela limite l’authentification à une seule clé privée.
  • Étape 2 : Modifier la Configuration SSH pour Limiter les Clés
    • Dans le fichier ~/.ssh/config, ajoutez :bashCopier le codeHost * IdentitiesOnly yes Cela garantit que seulement les clés spécifiées sont utilisées.

Cas 2 : Tentatives Répétées avec des Mauvais Mots de Passe

  • Situation : Vous avez tenté de vous connecter plusieurs fois avec un mot de passe incorrect.
  • Étape 1 : Réinitialisation du Mot de Passe
    • Réinitialisez le mot de passe sur le serveur pour éviter de nouvelles tentatives infructueuses :bashCopier le codepasswd user
    • Utilisez un mot de passe plus fort et mémorable.
  • Étape 2 : Utiliser l’Option -o PreferredAuthentications=password pour Spécifier le Mot de PassebashCopier le codessh -o PreferredAuthentications=password user@remote_host Cette option force SSH à utiliser uniquement le mot de passe pour l’authentification.

Cas 3 : Blocage par le Serveur après Trop d’Échecs

  • Situation : Le serveur bloque les connexions après plusieurs échecs, nécessitant une action de votre part pour lever le blocage.
  • Étape 1 : Contacter l’Administrateur du Serveur
    • Demandez à l’administrateur de débloquer votre IP ou d’autoriser une nouvelle tentative de connexion.
  • Étape 2 : Utilisation de la Connexion avec une Adresse IP Différente
    • Changez d’adresse IP (par exemple, en utilisant un VPN) et essayez de vous reconnecter.

4. Problème : « Host Key Verification Failed »

Symptôme : Lorsque vous essayez de vous connecter à un serveur, l’erreur « Host Key Verification Failed » apparaît.

Cas de Figure et Solutions :

Cas 1 : Clé d’Hôte Changée après une Réinstallation

  • Situation : Le serveur a été réinstallé ou a subi une mise à jour, ce qui a modifié la clé d’hôte.
  • Étape 1 : Supprimer l’Ancienne Clé d’Hôte
    • Supprimez l’ancienne clé dans le fichier ~/.ssh/known_hosts :bashCopier le codessh-keygen -R <hostname>
  • Étape 2 : Ajouter la Nouvelle Clé d’Hôte
    • Lors de la connexion suivante, SSH demandera d’accepter la nouvelle clé d’hôte. Tapez yes pour accepter.

Cas 2 : Attaque « Man-in-the-Middle » Possible

  • Situation : Si vous n’avez pas réinstallé le serveur, il est possible qu’une attaque de type « Man-in-the-Middle » soit en cours.
  • Étape 1 : Confirmation de la Clé avec l’Administrateur
    • Contactez l’administrateur pour vérifier la clé d’hôte correcte.
  • **Étape 2 : Ajout Manuel de la clé.

Nouvelle Clé d’Hôte

  • Situation : Après avoir confirmé avec l’administrateur que la clé d’hôte a effectivement changé, ajoutez la nouvelle clé manuellement au fichier known_hosts.
  • Étape 1 : Ajout Manuel de la Clé
    • Si vous avez accès à la nouvelle clé d’hôte, ajoutez-la manuellement au fichier ~/.ssh/known_hosts pour éviter les messages d’erreur futurs. Vous pouvez obtenir la nouvelle clé avec la commande suivante :bashCopier le codessh-keyscan -t rsa <hostname> >> ~/.ssh/known_hosts
    • Étape 2 : Vérification de l’Ajout
      • Après avoir ajouté la clé manuellement, vérifiez en vous reconnectant pour vous assurer que l’erreur ne se produit plus.

5. Problème : « SSH Connection Timeout »

Symptôme : La connexion SSH semble se figer pendant l’établissement, avant que l’erreur « Connection Timeout » ne s’affiche.

Cas de Figure et Solutions :

Cas 1 : Latence Réseau Élevée

  • Situation : Vous vous connectez à un serveur éloigné ou avec une connexion réseau instable, ce qui entraîne une latence élevée.
  • Étape 1 : Augmenter le Timeout
    • Modifiez les paramètres SSH pour permettre un temps de connexion plus long :bashCopier le codessh -o ConnectTimeout=30 user@remote_host
      • Cette option définit un délai de 30 secondes pour l’établissement de la connexion.
  • Étape 2 : Vérification de la Latence Réseau
    • Utilisez ping pour vérifier la latence :bashCopier le codeping remote_host
    • Si la latence est très élevée, envisagez de changer de réseau ou d’utiliser une connexion plus stable.

Cas 2 : Le Pare-feu Bloque les Connexions

  • Situation : Le serveur cible est derrière un pare-feu restrictif qui bloque le port SSH.
  • Étape 1 : Vérification du Pare-feu
    • Utilisez nc pour tester la connectivité sur le port SSH :bashCopier le codenc -zv remote_host 22
      • Si cela échoue, vous devrez peut-être reconfigurer le pare-feu pour autoriser les connexions entrantes sur le port 22.
  • Étape 2 : Contacter l’Administrateur du Réseau
    • Demandez à l’administrateur de réseau d’autoriser les connexions SSH si le pare-feu est géré centralement.

Cas 3 : Configuration Incorrecte du Serveur SSH

  • Situation : Le fichier de configuration SSH sur le serveur est mal configuré, empêchant les connexions.
  • Étape 1 : Vérification du Fichier sshd_config
    • Accédez au fichier /etc/ssh/sshd_config et assurez-vous que les directives comme Port, ListenAddress, et PermitRootLogin sont correctement configurées.
  • Étape 2 : Redémarrage du Service SSH
    • Après avoir fait des modifications :bashCopier le codesudo systemctl restart sshd
      • Assurez-vous que le service redémarre correctement et que les nouvelles configurations sont appliquées.

Cas 4 : Nombre Excessif de Connexions Simultanées

  • Situation : Si de nombreux utilisateurs tentent de se connecter simultanément, le serveur peut refuser de nouvelles connexions.
  • Étape 1 : Augmenter le Nombre Maximum de Sessions SSH
    • Modifiez le fichier de configuration pour permettre plus de connexions :bashCopier le codeMaxSessions 10
      • Cette option permet à plus d’utilisateurs de se connecter en même temps sans que la connexion ne soit bloquée.
  • Étape 2 : Limitation des Sessions Inactives
    • Configurez SSH pour fermer automatiquement les connexions inactives après un certain temps :bashCopier le codeClientAliveInterval 300 ClientAliveCountMax 0
      • Cela déconnectera les utilisateurs inactifs, libérant des ressources pour d’autres connexions.

Les erreurs courantes rencontrées avec SSH peuvent sembler intimidantes, mais avec une approche systématique, elles peuvent être résolues efficacement. En comprenant les causes profondes de chaque erreur et en appliquant les correctifs appropriés, vous pouvez assurer une connexion stable et sécurisée à vos serveurs. Ce guide offre une base solide pour diagnostiquer et résoudre les problèmes SSH, avec des solutions adaptées à divers scénarios réels.

Retour en haut