Utilisez OpenSSH pour fournir un environnement sécurisé pour exécuter des terminaux distants. L'utilisation de base d'OpenSSH et du terminal est très simple, mais cet article couvrira également d'autres éléments permettant la connexion automatique à des hôtes distants, les moyens d'exécuter des applications distantes et la manière de copier en toute sécurité des fichiers entre hôtes.
À propos de cette série
L'administrateur UNIX® type dispose d'un ensemble d'utilitaires clés, de savoir-faire et de systèmes fréquemment utilisés pour faciliter le processus administratif. Divers utilitaires clés, chaînes de ligne de commande et scripts existent pour rationaliser différents processus. Certains de ces outils proviennent du système d'exploitation, mais la plupart du savoir-faire vient d'une expérience à long terme et de la nécessité de réduire le stress du travail de l'administrateur système. Cette série d'articles vise à tirer le meilleur parti des outils disponibles dans divers environnements UNIX, notamment sur les moyens de simplifier les tâches administratives dans des environnements hétérogènes.
Pourquoi utiliser OpenSSH ?
Les services réseau standards que vous utilisez quotidiennement, tels que FTP, Telnet, RCP, Remote Shell (rsh), etc., fonctionnent bien dans un environnement fermé, mais les informations transmises sur le réseau à l'aide de ces services ne sont pas cryptées. Toute personne utilisant un renifleur de paquets sur votre réseau ou sur un ordinateur distant peut consulter les informations échangées et parfois même les informations de mot de passe.
De plus, avec tous ces services, les options d'automatisation du processus de connexion sont limitées et reposent souvent sur l'intégration d'un mot de passe en texte brut dans la ligne de commande afin d'exécuter des instructions, ce qui rend le processus de connexion encore plus dangereux.
Le protocole Secure Shell (SSH) a été développé pour contourner ces limitations. SSH assure le cryptage de l'ensemble du canal de communication, y compris l'échange d'identifiants de connexion et de mot de passe, et fonctionne avec des clés publiques et privées pour fournir une authentification automatisée des connexions. Vous pouvez également utiliser SSH comme protocole de transport sous-jacent. Utiliser SSH de cette manière signifie qu'après l'ouverture d'une connexion sécurisée, tous les types d'informations peuvent être échangés sur le canal crypté, et même HTTP et SMTP peuvent utiliser cette méthode pour sécuriser le mécanisme de communication.
OpenSSH est une implémentation gratuite des protocoles SSH 1 et SSH 2. Il a été initialement développé dans le cadre du système d'exploitation OpenBSD (Berkeley Software Distribution) et est désormais publié en tant que solution générale pour UNIX ou Linux® et les systèmes d'exploitation similaires.
Installer OpenSSH
OpenSSH est un logiciel gratuit et peut être téléchargé à partir du site Web principal d'OpenSSH (voir Ressources). Les systèmes OpenSSH peuvent être créés à partir du code source sur divers systèmes, notamment Linux, HP-UX, AIX®, Solaris, Mac OS X, etc. Il est généralement possible de trouver des binaires précompilés pour la plateforme et la version choisies. Certains fournisseurs proposent même des kits d'outils OpenSSH dans le cadre du système d'exploitation.
Pour construire OpenSSH, vous avez besoin des éléments suivants :
Si vous devez utiliser les paramètres de configuration par défaut, utilisez la séquence de construction normale, comme indiqué dans le listing 1 ci-dessous.
$ ./configurer $ faire $ faire installer |
Cela installe les binaires, les bibliothèques et les fichiers de configuration dans le répertoire /usr/local, par exemple, les binaires dans /usr/local/bin et les fichiers de configuration dans /usr/local/etc. Si vous souhaitez intégrer divers outils dans l'environnement principal, vous devrez peut-être spécifier l'option --prefix pour définir le répertoire de base et l'option --sysconfdir pour définir l'emplacement du fichier de configuration :
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
Certaines autres options générales que vous pouvez spécifier incluent :
Après avoir terminé la configuration, utilisez make pour construire normalement.
Une fois le processus de création et d'installation terminé, vous devez configurer le système en créant d'abord une clé SSH qui identifie de manière unique le système, puis en activant une communication sécurisée entre le client et l'hôte. Vous pouvez exécuter :
$ créer la clé de l'hôte |
Vous pouvez également effectuer les différentes étapes manuellement sur la ligne de commande. Vous devez créer trois clés (une pour chacun des principaux algorithmes de chiffrement : rsa1, rsa et dsa). Par exemple, le listing 2 montre comment créer la clé rsa1.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key Génération d'une paire de clés rsa1 publique/privée. Saisissez la phrase secrète (vide s'il n'y a pas de phrase secrète) : Saisissez à nouveau la même phrase secrète : Votre identification a été enregistrée dans /etc/ssh//ssh_host_key. Votre clé publique a été enregistrée dans /etc/ssh//ssh_host_key.pub. L’empreinte digitale de la clé est : 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 racine@hôte distant |
Vous êtes invité à saisir votre mot de passe. Pour la clé d'hôte, vous n'avez probablement pas besoin du mot de passe de la clé, vous pouvez donc appuyer sur Retour pour utiliser un mot de passe vide. Alternativement, vous pouvez utiliser l'option -N sur la ligne de commande pour accélérer le processus (voir Listing 3).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" Génération d'une paire de clés rsa1 publique/privée. Votre identification a été enregistrée dans /etc/ssh/ssh_host_key. Votre clé publique a été enregistrée dans /etc/ssh/ssh_host_key.pub. L’empreinte digitale de la clé est : a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 racine@hôte distant |
Répétez maintenant le processus pour créer les clés rsa et dsa (voir Listing 4).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
Cela créera deux fichiers pour chaque type de clé : la clé publique (dans un fichier se terminant par .pub) et la clé privée. Vous devez vous assurer que la clé privée n'est lue que par les processus root et SSH - cela doit être configuré automatiquement. Vous souhaiterez peut-être copier la clé publique vers un emplacement central sur un partage NFS (Network File System) afin que les utilisateurs puissent l'ajouter à la liste des clés d'hôte connues.
Enfin, vous devez démarrer le processus sshd et le configurer pour qu'il s'exécute au démarrage. Pour les hôtes Linux, vous pouvez trouver le script d'initialisation approprié dans contrib/redhat/sshd.init qui peut être ajouté à /etc/init.d.
Utiliser SSH pour l'accès de base au terminal
Le rôle principal d'OpenSSH est celui d'un outil SSH, une alternative sécurisée au protocole Telnet pour une connexion à distance sécurisée aux hôtes UNIX ou Linux.
Pour vous connecter à un hôte distant à l'aide du shell standard, vous tapez simplement le nom d'hôte :
$ ssh hôte distant |
Par défaut, le système tente d'utiliser le nom d'utilisateur actuel comme nom de connexion. Pour utiliser un nom de connexion différent, faites précéder le nom d'hôte du nom de connexion, séparé par le symbole @. Par exemple:
$ ssh mc@hôte distant |
Vous êtes invité à saisir votre mot de passe utilisateur - ceci est similaire à Telnet.
La première fois que vous vous connectez à un hôte, il vous sera demandé si vous souhaitez enregistrer une copie de la clé publique de l'hôte distant dans un fichier « hôtes connus » (voir Listing 5).
$ ssh racine@hôte distant L'authenticité de l'hôte « remotehost (10.211.55.3) » ne peut pas être établie. L'empreinte digitale de la clé RSA est cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b. Etes-vous sûr de vouloir continuer à vous connecter (oui/non oui) ? Avertissement : « hôte distant » (RSA) ajouté définitivement à la liste des hôtes connus. |
À l'avenir, vous ne recevrez plus cet avertissement, mais l'avertissement sera émis lorsque le système détectera que la clé publique renvoyée par l'hôte distant ne correspond pas à la clé publique dans le fichier de l'hôte, indiquant une éventuelle attaque de pirate informatique. Cela peut également signifier que l'administrateur a uniquement régénéré la clé d'hôte.
Essentiellement, il n'y a aucune différence entre les sessions SSH et Telnet, sauf que les sessions SSH sont cryptées, ce qui rend presque impossible pour quiconque de fouiner dans votre session ou de connaître votre mot de passe ou les commandes et opérations que vous exécutez.
Vous pouvez également utiliser SSH pour exécuter des commandes directement sur l'hôte distant sans utiliser de shell. Par exemple, pour exécuter la commande who sur l'hôte distant, voir le listing 6.
Listing 6. Exécution de la commande who sur l'hôte distant$ ssh mc@remotehost qui console d'administration 23 novembre 14:04 mc ttyp1 2 décembre 10:53 (sulaco.mcslp.pri) mc ttyp2 10 décembre 06:50 (sulaco.mcslp.pri) administrateur ttyp3 12 décembre 13:33 mc ttyp4 15 décembre 12:38 (nautilus.mcslp.p) |
L'exécution à distance émule également les entrées, sorties et erreurs standard de l'hôte client. Cela signifie que vous pouvez rediriger la sortie vers une commande distante. Par exemple, vous pouvez ajouter des informations directement à un fichier distant en redirigeant la sortie de la commande vers SSH sur l'hôte distant (voir Listing 7).
Listing 7. Ajout d'informations directement à un fichier distant$ echo "Bonjour tout le monde" |ssh mc@remotehost 'cat >> helloworlds.txt' |
Vous pouvez utiliser cette méthode pour augmenter votre productivité lorsque vous utilisez SSH afin de simplifier le processus de connexion.
Échange de fichiers via SFTP
La commande sft est une alternative au FTP qui utilise le canal de communication sécurisé fourni par le protocole SSH.
Pour ouvrir une connexion SFTP, spécifiez le nom d'hôte sur la ligne de commande :
$ hôte distant sftp |
Gardez à l'esprit que la commande ci-dessus suppose que vous souhaitez utiliser la même méthode de connexion que votre hôte actuel. Pour utiliser une autre méthode de connexion, ajoutez le nom d'hôte au nom d'utilisateur :
$ sftp mc@hôte distant |
Bien que SFTP fonctionne de manière similaire à FTP, il existe certaines limitations et différences. Par exemple, dir dans FTP fournit une longue liste de fichiers (voir Listing 8).
ftp> répertoire 502 'EPSV' : commande non comprise. 227 Entrée en mode passif (192,168,0,110,150,159) 150 Ouverture de la connexion de données en mode ASCII pour la liste des répertoires. total 1472 drwx------ 3 mc staff 102 4 novembre 11:17 Bureau drwx------ 3 mc staff 102 4 novembre 11:17 Documents drwx------ 18 mc staff 612 5 novembre 18:01 Bibliothèque drwx------ 3 mc staff 102 4 novembre 11:17 Films drwx------ 3 mc staff 102 4 novembre 11:17 Musique drwx------ 4 mc staff 136 4 novembre 11:17 Photos drwxr-xr-x 4 mc staff 136 4 novembre 11:17 Public drwxr-xr-x 6 mc staff 204 4 novembre 11:17 Sites drwxrwxrwx 3 personnel racine 102 24 décembre 07:30 tmp drwxr-xr-x 7 personnel racine 238 11 décembre 08:39 essai 226 Transfert terminé. |
Dans SFTP, dir agit comme un alias pour la commande de liste du répertoire hôte, qui est ls sous UNIX ou Linux. Par défaut, dir fournit uniquement une courte liste (voir Listing 9).
sftp> répertoire Bureau Documents Bibliothèque Films Musique Images Public Sites d'essai tmp |
Pour obtenir une longue liste, utilisez les mêmes options que ls (voir Listing 10).
sftp> rép -l drwx------ 3 mc staff 102 4 novembre 11:17 Bureau drwx------ 3 mc staff 102 4 novembre 11:17 Documents drwx------ 18 mc staff 612 5 novembre 18:01 Bibliothèque drwx------ 3 mc staff 102 4 novembre 11:17 Films drwx------ 3 mc staff 102 4 novembre 11:17 Musique drwx------ 4 mc staff 136 4 novembre 11:17 Photos drwxr-xr-x 4 mc staff 136 4 novembre 11:17 Public drwxr-xr-x 6 mc staff 204 4 novembre 11:17 Sites drwxrwxrwx 3 personnel racine 102 24 décembre 07:30 tmp drwxr-xr-x 7 personnel racine 238 11 décembre 08:39 essai |
Les autres commandes telles que le changement de répertoire (cd, lcd localement), la création de répertoires (mkdir) et l'envoi (put) et la réception (get) de fichiers restent inchangées. Les deux dernières commandes, put et get, acceptent toutes deux les caractères génériques (similaires à mput et mget dans FTP), mais soyez prudent lorsque vous transférez plusieurs fichiers sans caractères génériques dans SFTP. Par exemple, sftp> mget file1 file2 file3 est reconnu comme essayant d'obtenir file1 et file2 et de les placer dans le répertoire local file3, mais ce répertoire peut ne pas exister.
Copier des fichiers entre hôtes à l'aide de scp
La commande scp fonctionne de manière similaire à la commande rc, sauf qu'elle utilise le protocole SSH pour transférer des fichiers. Lors du transfert de fichiers liés au contenu ou de l'échange automatique de fichiers sur Internet, scp est bien meilleur.
Son format est similaire à rcp ; vous spécifiez le chemin du fichier entre lequel copier et le nom d'hôte doit y être fusionné si nécessaire. Par exemple, pour copier un fichier .bashrc d'un hôte distant vers votre ordinateur local, utilisez :
$ scp hôte distant :/users/mc/.bashrc ~/.bashrc |
Comme précédemment, pour spécifier un nom d'utilisateur à utiliser, faites précéder l'hôte du nom d'utilisateur, séparé par le symbole @ :
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
En supposant que l'utilisateur auquel vous vous connectez dispose des autorisations de lecture, vous devrez également utiliser le métacaractère ~ pour accéder aux informations de votre répertoire personnel.
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc |
Pour copier depuis le répertoire personnel de l'utilisateur connecté, utilisez :
$ scp mc@remotehost:.bashrc ~/.bashrc |
La commande scp prend également en charge les règles d'expansion standard. Ainsi, pour copier tous les fichiers .bash*, vous pouvez utiliser :
$ scp mc@remotehost:.bash* ~ |
Vous pouvez même sélectionner des fichiers individuels plus spécifiquement en utilisant des accolades développantes ({}) :
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
Notez que les accolades expansives dans le chemin du fichier (et non l'expression complète du chemin distant) sont placées entre guillemets doubles.
Dans tous les exemples ci-dessus, le mot de passe de l'hôte distant vous sera demandé. Cela peut être évité en fournissant à l'hôte la partie publique de votre clé personnelle.
Activer la connexion automatique à l'aide de la clé publique
Lorsque vous vous connectez à un système distant à l'aide de ssh, sftp ou scp, vous avez toujours besoin d'un mot de passe pour terminer le processus de connexion. En créant une clé publique ou privée, en ajoutant la partie publique de la clé au fichier ~/.ssh/authorized_keys et en échangeant une clé valide avec le site distant, vous pouvez éliminer l'obligation de fournir un mot de passe et autoriser la connexion automatique.
Pour créer une clé publique ou privée, vous devez utiliser ssh-keygen pour spécifier le type de chiffrement de clé. Le type de clé rsa est utilisé dans la démonstration, mais d'autres types de clés sont également valides. Pour créer la clé, voir le listing 11.
$ ssh-keygen-trsa Génération d'une paire de clés rsa publique/privée. Entrez le fichier dans lequel enregistrer la clé (/root/.ssh/id_rsa) : |
Vous devez saisir l'emplacement du fichier contenant les clés (composants publics et privés). Utiliser la valeur par défaut (dans le répertoire .ssh de votre répertoire personnel) est généralement correct (voir Listing 12).
Répertoire créé '/root/.ssh'. Saisissez la phrase secrète (vide s'il n'y a pas de phrase secrète) : |
Si vous saisissez un mot de passe à cette étape, un fichier de clé de sécurité est créé, mais vous devez également saisir le mot de passe à chaque fois que vous utilisez la clé. Appuyer sur Retour signifie qu'aucun mot de passe n'est requis (voir Listing 13).
Listing 13. Ignorer l'exigence de mot de passe en appuyant sur RetourSaisissez à nouveau la même phrase secrète : Votre identification a été enregistrée dans /root/.ssh/id_rsa. Votre clé publique a été enregistrée dans /root/.ssh/id_rsa.pub. L’empreinte digitale de la clé est : 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba racine@hôte distant |
La clé publique (id_rsa.pub) et la clé privée correspondante (id_rsa) sont désormais créées.
Pour activer la connexion automatique, vous devez copier le contenu de la clé publique dans le fichierauthorized_keys dans le répertoire ~/.ssh sur l'hôte distant. Vous pouvez automatiser cela en utilisant SSH (voir Listing 14).
$ cat ./.ssh/id_rsa.pub | ssh mc@remotehost 'cat >> .ssh/authorized_keys'; |
De plus, si vous faites cela fréquemment sur plusieurs hôtes, vous pouvez utiliser un petit script ou une fonction shell pour effectuer toutes les étapes nécessaires, comme indiqué dans le listing 15.
OLDDIR='pwd'; si [ -z "$1" ] alors; echo Besoin d'informations utilisateur @ hôte ; sortie; fi; cd $HOME ; si [ -e "./.ssh/id_rsa.pub" ] alors; chat ./.ssh/id_rsa.pub | ssh $1 'chat >> .ssh/authorized_keys'; autre ssh-keygen -trsa ; chat ./.ssh/id_rsa.pub | ssh $1 'chat >> .ssh/authorized_keys'; fi; cd $OLDDIR |
Vous pouvez utiliser le script setremotekey pour copier une clé existante, ou si la clé n'existe pas, en créer une avant de la copier :
$ setremotekey mc@remotehost |
Désormais, chaque fois que vous devez vous connecter à un hôte distant à l'aide d'une clé publique, vous pouvez utiliser un script de clé personnelle en combinaison avec une liste de clés acceptées par cet utilisateur sur l'hôte distant.
Résumer
OpenSSH est un outil important qui sécurise les communications et les transferts d'informations entre ordinateurs. Non seulement c'est une alternative sécurisée aux outils conventionnels tels que Telnet, FTP et RCP, mais il peut également servir de protocole de transport pour d'autres services tels que Subversion, X Windows System et rsync. Cet article vous montre les étapes de base requises pour faire fonctionner OpenSSH, comment utiliser au mieux les principaux outils fournis par OpenSSH et comment utiliser les outils d'échange de clés pour simplifier les problèmes de connexion et de connectivité.