Skip to main content

De nombreux sites exigent que vous arrêtiez de vous connecter au système avec Telnet et que vous utilisiez plutôt la technologie SSH. La raison en est une plus grande sécurité. Lorsque vous vous connectez en utilisant Telnet, votre mot de passe, ainsi que toute autre donnée, est envoyé en texte clair. Toute personne disposant d'un analyseur de réseau peut lire ce que vous avez envoyé. SSH, en revanche, crypte toutes les données et les rend illisibles. On suppose que les démons Telnet et SSH présentent une expérience utilisateur interchangeable ; c'est faux.

Tout d'abord, il existe de nombreux clients différents en SSH et en Telnet. Ceux-ci ont des interfaces utilisateur différentes et peuvent utiliser différents types de terminaux. Même lorsqu'ils utilisent le même type de terminal, ils peuvent se comporter différemment car ils émulent un terminal et les émulations ne sont pas parfaites. Mais, même en tenant compte des différences entre les logiciels clients, il existe plusieurs différences subtiles et pas si subtiles entre une session connectée à un démon Telnet (soit telnetd ou telnet_msd) et une session connectée au démon SSH. Il y a également un certain nombre de bogues, que je vais couvrir. Gardez à l'esprit que j'utilise le démon SSH de l'Internet Security Pack (ISP) pour la version 2.1.0k d'OpenVOS. C'est la dernière version disponible au moment où j'ai écrit ceci.

Noms d'utilisateurs :

Avant même que vous ne soyez connecté, il y a une différence dans la façon dont Telnet et SSH gèrent votre nom d'utilisateur. Les démons Telnet vous permettront de vous connecter avec n'importe quelle variation unique de votre nom d'utilisateur et le nom est insensible à la casse. Avec le nom d'utilisateur Noah_Davids, je peux me connecter en tant que Noah_D, noah_d, NoAh_D ou NoAh_DaViDs lorsque j'utilise Telnet, mais la seule chose qui fonctionnera avec SSH est Noah_Davids. Mon alias de nd fonctionne de la même manière. Avec Telnet, je peux utiliser nd, ND ou nD, mais avec SSH, seul nd fonctionnera.

Noms de groupes :

L'invite de connexion présentée avec une connexion Telnet me permet de spécifier un nom du groupe

telnet 164.152.77.217
Essayer...
Connecté au 164.152.77.217.
Le caractère d'échappement est "^]".

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 15:24:14
login nd.SysAdmin
Mot de passe ? [mot de passe saisi ici]

Noah_Davids.SysAdmin connecté sur %phx_vos#m17 à 12-12-12 15:24:55 mst.
Figure 1 - Connexion Telnet avec nom de groupe

Mais le protocole SSH n'autorise qu'un nom d'utilisateur. Si j'inclus le nom du groupe, il est traité comme faisant partie du nom d'utilisateur et la connexion échoue.

>system>openssl>bin>ssh [email protected]

nd.SysAdminLe mot de passe de @164.152.77.217 : [mot de passe saisi ici]

Autorisation refusée, veuillez réessayer.
[email protected]'s password :
Figure 2 - Connexion SSH avec nom de groupe

Une fois que vous êtes connecté, vous pouvez changer de groupe avec un sous-login (mais voir la section sur le ssl-403 ci-dessous pour les limitations actuelles)

Différences de mots de passe :

La plus grande différence dans le traitement des mots de passe entre les connexions Telnet et SSH est que SSH n'exige pas de mots de passe pour l'authentification. Vous pouvez configurer une paire de clés publiques/privées et sauter toute l'étape de saisie du mot de passe. Consultez la page Configuration Stratus STCP SSH pour utiliser l'authentification par clé publique pour obtenir une description de la procédure à suivre.

Si vous utilisez des mots de passe, vous devez faire face à certaines différences. Tout d'abord, l'expiration des mots de passe est traitée différemment. Avec Telnet, l'invite de connexion vous avertit lorsque votre mot de passe est sur le point d'expirer et vous permet de le modifier.

telnet 164.152.77.217
Essayer...
Connecté au 164.152.77.217.
Le caractère d'échappement est "^]".

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 14:04:40
login nd
Mot de passe ? [mot de passe actuel saisi ici]

Votre mot de passe expirera dans 5 jours.
Nouveau mot de passe (première entrée) ?
Figure 3 - Avertissement/prompt d'expiration du mot de passe d'une connexion Telnet

SSH vous avertira mais vous n'avez pas la possibilité de le changer. Vous devez utiliser la commande change_password pour invalider votre mot de passe, ce qui vous obligera à le changer lors de votre prochaine connexion.

ssh [email protected]
Mot de passe de [email protected] : [mot de passe actuel saisi ici]

Votre mot de passe expirera dans 5 jours.
Noah_Davids.CAC s'est connecté sur %phx_vos#m17 le 13-01-09 13:06:35 mdt.

Bienvenue.

prêt 13:06:35
changer_mot_de_passe
Votre mot de passe n'est plus valable. Vous devez le changer lors de votre prochaine connexion.
prêt 13:06:49
Figure 4 - Avertissement d'expiration du mot de passe de la connexion SSH
et la commande change_password

Une fois votre mot de passe expiré (ou que vous l'avez invalidé avec la commande change_password), vous serez invité à le modifier. Contrairement à Telnet, ce n'est pas facultatif, vous devez changer votre mot de passe à ce stade. Après avoir changé votre mot de passe, vous êtes automatiquement déconnecté et devez vous reconnecter.

ssh [email protected]
Le mot de passe de [email protected] :

ATTENTION : votre mot de passe a expiré.
Vous devez changer votre mot de passe maintenant et vous connecter à nouveau !
Mot de passe actuel ? [mot de passe actuel saisi ici]

Nouveau mot de passe (première entrée) ? [nouveau mot de passe saisi ici]

Nouveau mot de passe (deuxième entrée) ? [nouveau mot de passe saisi ici]

Connexion au 164.152.77.217 fermée.
Figure 5 - Changement de votre mot de passe pendant la connexion SSH

Une autre différence est que les connexions SSH ne prennent pas en charge les mots de passe par défi-réponse alors que les connexions Telnet le font.

Sous-systèmes :

Lorsque vous vous connectez pour la première fois à un module avec Telnet, la commande de connexion vous permet de sélectionner un sous-système

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 11:23:40
login -form -usage
 --------------------------------- login -------------------------------
 nom_utilisateur :
 -privilégié : tel qu'enregistré
 -mot de passe :
 -change_mot_de_passe : non
 -priorité :
 -home_dir :
 -module :
 -sous-système :
Figure 6 - La connexion Telnet vous permet de spécifier un nom de sous-système

Le protocole ssh n'a pas de mécanisme pour spécifier un nom de sous-système. Si l'indicateur must_use_subsystem est activé dans votre entrée de base de données d'enregistrement, le premier sous-système spécifié dans votre entrée d'enregistrement est automatiquement utilisé. Si le bit n'est pas défini, aucun sous-système n'est utilisé. (Notez qu'avant la version ISP 2.1.0j, le premier sous-système était utilisé même si le bit must_use_subsystem n'était pas activé). Bien que les arguments de la commande de connexion disponibles avant que vous ne vous connectiez réellement comprennent un moyen de spécifier le sous-système (voir figure 6) une fois que vous êtes connecté, cette option n'est plus disponible (voir figure 7).

login -form -usage
 --------------------------------- login -------------------------------
 group_name : CAC
 -privilégiés : oui
 -priorité :
 -mot de passe :
 -module :
Figure 7 - Arguments de la ligne de commande du sous-login

La seule façon d'accéder à un sous-système une fois connecté est de se reconnecter au système par Telnet et de se reconnecter.

telnet 127.0.0.1
Essayer...
Connecté à 127.0.0.1.
Le caractère d'échappement est '^]'.

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 11:37:34
login nd -sous-système test_ss
Mot de passe ?        

Noah_Davids.CAC s'est connecté sur %phx_vos#m17 le 12-12-13 11:37:49 mst.
ceci est le sous-système de test

prêt 11:37:49
Figure 8 - Telnet vers l'adresse de bouclage et se connecter à nouveau pour accéder à un sous-système

 

Contrôle d'accès :

Les connexions Telnet et SSH prennent en charge les enveloppeurs TCP pour vous permettre de restreindre l'accès en fonction de l'adresse IP, mais avec les démons Telnet, l'enveloppeur TCP n'est pas activé par défaut et vous devez l'activer explicitement avec l'argument de contrôle -tcpwrapper_check. Alors qu'avec le démon SSH, les enveloppeurs TCP sont activés par défaut et il n'y a aucun moyen de les désactiver. Vous pouvez le désactiver efficacement en autorisant toutes les connexions SSH dans le fichier de configuration hosts.allow de TCP Wrappers.

telnetd -form -usage
 ------------------------------- telnetd ------------------------------
 -fichier_service :     >system>stcp>telnetservice
 -tcpwrapper_check : non
 -numérique : oui
Figure 9 - Activation des enveloppeurs TCP dans le démon telnetd

 

telnet_msd -form -usage
 ------------------------------ telnet_msd ----------------------------
 -network_port :     24
 -max_sessions :     28
 -erreur_gravité : 2
 -separate_log : oui
 -log_dir :          >système>stcp>logs
 -vterm_starname : telnet*
 -vterm_login : oui
 -vterm_slave_id :
 -extension : 133
 -force_edit : oui
 -CE_valeur_décimale : 8
 -EL_valeur_décimale : 21
 -tcpwrapper_check : non
 -numérique : non
Figure 10 - Activation des enveloppeurs TCP dans le démon telnet_msd

Le démon sshd supporte également des options dans le fichier sshd_config pour vous permettre de spécifier les utilisateurs ou les groupes qui doivent être autorisés à accéder à ssh (directives AllowUsers et AllowGroups) ou refusés (directives DenyUsers et DenyGroups). Ces directives vous permettent de spécifier des noms d'utilisateurs, des domaines sources ou des combinaisons. Il est possible d'autoriser noah_davids à partir de corp.stratus.com mais de le refuser à partir de az.stratus.com.

AllowUsers *@*.stratus.com
DenyUsers *@*az.stratus.com
Figure 11 - Exemple de directives AllowUsers et DenyUsers dans sshd_config
>system>openssl>bin>ssh [email protected]
Le mot de passe de [email protected] :

Autorisation refusée, veuillez réessayer.
Le mot de passe de [email protected] :
Figure 12 - Connexion à partir de phxtest-m15.az.stratus.com refusée en raison de la directive DenyUsers

 

Environnement de commandement :

Une fois connecté, une connexion Telnet vous présente l'environnement de commande VOS standard. SSH permet à un administrateur de spécifier soit l'environnement de commande standard, soit l'environnement bash shell. Cela se fait sur la base des numéros de port.

d sshservices

%phx_vos#m17_mas>opt>openssl>etc>sshservices 12-12-13 12:31:31 mst

ssh "window_term" "" "login" 1 1 s$pt_log.m16
ssh2200   "window_term" "-shell"   "bash" 1 1 s$pt_log.m16
Figure 13 - Fichier sshservices, le port 22 est la ligne de commande VOS standard,
le port 2200 est le coquillage de la bash
>system>openssl>bin>ssh [email protected] -p 2200
Le mot de passe de [email protected] :

Bienvenue.

sh-2.05$
Figure 14 - Connexion SSH utilisant le port 2200 et obtenant un shell bash

 

Variables d'environnement :

Par défaut, les connexions Telnet ne définissent que 6 variables d'environnement, tandis que les connexions SSH en définissent 12

env
 HOME =/SysAdmin/Noah_Davids
LOGNAME=racine
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/
+stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
Figure 15 - Variables d'environnement définies dans une connexion Telnet

 

env
 HOME =/SysAdmin/Noah_Davids
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/
+stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
TZ=mst+07:00:00
USER=Noah_Davids
LOGNAME=Noah_Davids
MAIL=/var/spool/mail/Noah_Davids
SHELL=/bin/sh
SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22
SSH_TTY=#s$pt_log.m16_3
Figure 16 - Variables d'environnement définies dans une connexion SSH

 

Types d'appareils :

Enfin, ce n'est pas vraiment une différence entre Telnet et SSH mais entre les démons telnetd et sshd et le démon telnet_msd. Telnetd et sshd utilisent tous deux des périphériques window_term, tandis que telnet_msd utilise des périphériques vterm. Il y a quelques différences entre la façon dont vterms et window_term traitent certaines touches de fonction (comme CANCEL) en ligne de commande et la façon dont ils traitent les sorties d'écran brutes. Certaines applications qui créent leurs propres formulaires et n'ont pas été mises à jour pour utiliser le nouveau s$control OP_CODES ne présentent pas ces formulaires correctement en utilisant les dispositifs window_term. La deuxième meilleure façon de traiter ces applications est d'utiliser un tunnel SSH pour se connecter au système, le tunnel est alors configuré pour se connecter au démon telnet_msd. La meilleure façon de gérer l'application est, bien sûr, de la mettre à jour pour utiliser le nouveau OP_CODES.

 

Outre les différences ci-dessus qui sont inhérentes à Telnet et à SSH, il existe quelques bogues qui seront corrigés dans une prochaine version.

ssl-403 Groupes disponibles :

Lors de la connexion avec Telnet, tous les groupes spécifiés dans votre inscription sont disponibles pour les sous-logins, mais avec ssh, seuls les 5 premiers groupes sont disponibles.

Étant donné que je suis inscrit à des groupes, CAC, SysAdmin, Group_3, Group_4, Group_5, Group_6. Je peux faire une sous-connexion en utilisant n'importe quel groupe à partir d'une connexion Telnet

telnet 164.152.77.217
Essayer...
Connecté au 164.152.77.217.
Le caractère d'échappement est "^]".

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 15:38:02
login nd
Mot de passe ? [mot de passe actuel saisi ici]

Noah_Davids.CAC s'est connecté sur %phx_vos#m17 à 12-12-12 15:38:08 mst.

login Group_5

Noah_Davids.Group_5 s'est connecté sur %phx_vos#m17 à 12-12-12 15:39:39 mst.
prêt 15:39:39
déconnexion

login Group_6

Noah_Davids.Group_6 s'est connecté sur %phx_vos#m17 à 12-12-12 15:40:13 mst.
prêt 15:40:13
Figure 17 - Sous-connexions avec une connexion Telnet

Cependant, avec ssh, lorsque j'essaie d'utiliser Group_6, j'obtiens une erreur.

>system>openssl>bin>ssh [email protected]
Le mot de passe de [email protected] :

Noah_Davids.CAC s'est connecté sur %phx_vos#m17 à 12-12-12 15:41:02 mst.
prêt 15:41:02

login Group_5

Noah_Davids.Group_5 s'est connecté sur %phx_vos#m17 à 12-12-12 15:41:24 mst.
prêt 15:41:24
déconnexion

login Group_6
login : Format invalide en argument. Group_6 non autorisé pour group_name.
prêt 15:41:59
Figure 18 - Sous-connexions avec connexion SSH

 

ssl-418 - Le sous-niveau de processus :

Les connexions via Telnet ont un niveau de sous-processus de 0 tandis que celles via SSH ont un niveau de sous-processus de 3.

telnet 164.152.77.217
Essayer...
Connecté au 164.152.77.217.
Le caractère d'échappement est "^]".

OpenVOS version 17.1.0ax, Module %phx_vos#m17
Veuillez vous connecter 14:15:34
login nd
Mot de passe ? [mot de passe actuel saisi ici]

Noah_Davids.CAC s'est connecté sur %phx_vos#m17 le 12-12-13 14:15:39 mst.
prêt 14:15:39
display_line (process_info sub_process_level)
0 
prêt 14:15:49
Figure 19 - Niveau de sous-processus défini dans une connexion Telnet

 

>system>openssl>bin>ssh [email protected]
Mot de passe de [email protected] : [mot de passe actuel saisi ici]

Noah_Davids.CAC s'est connecté sur %phx_vos#m17 à 12-12-13 14:12:23 mst.
prêt 14:12:23
display_line (process_info sub_process_level)
3 
prêt 14:12:37
Figure 20 - Niveau de sous-processus défini dans une connexion SSH

Mise à jour le 14 janvier 2013 : Cela s'avère être une caractéristique et non un bogue. Le processus sshd est bifurqué en premier lieu lorsque start_process est fait pour lancer le processus d'écoute, en deuxième lieu lorsque sshd accepte la connexion et en troisième lieu lorsque le processus de connexion de l'utilisateur est créé. Telnet utilise un mécanisme différent pour lancer le processus utilisateur, ce qui n'entraîne aucun processus bifurqué.

Problèmes de fuseau horaire :

Enfin, je voudrais juste dire qu'il y a eu un certain nombre de problèmes liés au passage de l'heure d'été à l'heure normale, ou plus généralement au changement de fuseau horaire. Les sessions connectées via SSH ne reflèteraient pas les nouvelles valeurs par défaut. Ces problèmes devraient tous être corrigés dans cette dernière version (2.1.0k).

2024 Stratus Technologies.