1 votes

Le serveur SSH Bitvise ajoute des espaces supplémentaires dans la session.

Je utilise Bitvise SSH Server sur ma machine Windows pour un accès à distance. Le shell de connexion est ZSH, et je utilise également Oh My Zsh avec cela. Cependant, j'ai également essayé BASH et rencontré le même problème. Par conséquent, je suppose que ce problème vient du serveur Bitvise SSH, pas des shells Cygwin ou des émulateurs de terminal côté client.

Le problème peut être remarqué sur le prompt de mon ZSH. Tant que ma session SSH passe par ce serveur Bitvise SSH, il y aura des espaces supplémentaires dans le prompt. Veuillez voir les captures d'écran :

Différences entre une session qui passe par Bitvise et une autre qui ne le fait pas

Cette fenêtre est le MinTTY sur cette machine Windows. Quand je l'ouvre, vous pouvez voir qu'il n'y a qu'un espace après ~ (avant que je tape ssh 127.0.0.1). Cependant, une fois que je me connecte en SSH à la même machine, il y a deux espaces après ~ dans le prompt. De plus, si je fais une autre session SSH (vers la machine tiger) dans la session Bitvise SSH, le prompt du second a aussi des espaces supplémentaires (prompts soulignés en rouge). Cependant, si je quitte la session Bitvise et je me connecte en SSH à tiger directement, le prompt est normal (prompts soulignés en vert).

J'ai observé la même chose en me connectant depuis une machine distante (en utilisant gnome-terminal ou xfce4-terminal comme émulateur de terminal) à cette machine Windows.

Par conséquent, ma conclusion est que l'émulateur de terminal n'est pas à blâmer pour cela. Cygwin et son ZSH ne sont pas non plus à blâmer, car tout semble bon tant que je ne passe pas par Bitvise.

Je suppose qu'il y a un caractère spécial défini dans le thème Oh My Zsh qui n'est pas traité correctement lors du passage par Bitvise. Cependant, je n'ai pas pu déterminer exactement ce que c'est. Les thèmes Oh My Zsh semblent bons localement sans connexion SSH à Bitvise, et ils semblent bons sur toutes les machines Linux que j'ai. Par conséquent, je pense que cela doit être quelque chose avec Bitvise.


Comme suggéré dans les commentaires, j'ai exécuté set dans les deux environnements et obtenu les sorties dans deux fichiers texte : bitvise.txt et local.txt. Maintenant, le plus gros problème est que je ne peux pas les comparer en utilisant diff car diff affirme qu'ils sont des fichiers binaires (et ils sont différents). Je ne suis pas sûr si cela a quelque chose à voir avec les espaces étranges.

Forcer LANG sur diff n'a pas aidé.

$ diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents

$ LANG=en_US.UTF-8 diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents

$ LANG=C diff -uN bitvise.txt local.txt
Fichiers binaires bitvise.txt et local.txt différents

Les deux fichiers sont téléchargés ici : https://drive.google.com/open?id=0B6Pxoys5MF0Bc1d6QUMweUkybHc


J'ai testé différents réglages de TERM... Ça n'a pas semblé apporter quelque chose de bon. En mettant TERM=linux a abouti au même résultat qu'avec xterm.

Différents réglages de TERM


Mise à jour le 23/05/16

Le problème semble plus difficile que je ne pensais. J'ai trouvé un dossier "C:\Program Files\Bitvise SSH Server\TermInfo" qui contient des fichiers d'information sur le terminal. J'ai remplacé les fichiers de ce dossier par des fichiers similaires que j'ai copiés depuis une machine Ubuntu normale, mais cela n'a pas aidé. J'ai également essayé l'info terminal "cygwin" qui est installée avec Cygwin, sans chance... En fait, le fichier "cygwin" qui vient avec Cygwin est le même que celui qui vient avec Ubuntu...

Je suis à court d'idées maintenant.

Quand je me connecte en SSH au serveur Bitvise SSH, je peux faire exec /bin/bash pour remplacer la session actuelle par Bash. Cependant, dans ce Bash, si je me connecte en SSH à une autre machine Linux qui utilise Zsh et Oh My Zsh, le même problème persiste.

2voto

fjlksahfob Points 417

Une possibilité est que Oh My Zsh affiche des caractères Unicode, et que le problème soit que ces caractères ont des largeurs différentes dans une console Windows.

Par exemple, un caractère qui a une largeur de 0 dans MinTTY pourrait avoir une largeur de 1 dans la console Windows, ce qui ferait avancer le curseur. Ou un caractère qui a une largeur de 1 dans MinTTY pourrait avoir une largeur de 2 dans la console Windows.

Dans les captures d'écran que vous avez fournies, vous regardez zsh avec "Oh My Zsh" sous MinTTY.

Mais qu'en est-il dans une console Windows? Comment Oh My Zsh se présente-t-il là-bas?

Bitvise SSH Server exécute votre shell terminal dans une console Windows cachée, ce qui est nécessaire pour pouvoir exécuter des programmes de console Windows. En raison de cette architecture, zsh doit bien paraître dans une console Windows pour pouvoir être affiché correctement via Bitvise SSH Server.

1voto

bfrguci Points 485

Quatre semaines plus tard, j'ai enfin résolu le problème moi-même. Merci à denis bider qui semble faire partie de l'équipe de support de Bitvise SSH Server. Son explication sur la manière dont Bitvise exécute des shells dans la console Windows est la clé pour résoudre ce problème.

Il s'est avéré que la variable d'environnement $TREM et les fichiers terminfo étaient sans importance.

Le problème que j'avais en réalité était que les thèmes Oh My Zsh que j'utilise comportent des caractères qui s'affichent différemment dans ma console Windows. Cependant, j'ai découvert que c'était en réalité dû au fait que la page de code de ma console Windows était définie sur 936 (chinois simplifié) en raison de mes paramètres locaux Windows (pour les caractères non Unicode). J'ai constaté que si je change manuellement ma page de code en 437 (anglais américain) dans la session Bitvise SSH, la sortie devient correcte.

J'ai ensuite réalisé que pour les utilisateurs américains, ils n'avaient pas du tout ce problème !

Par conséquent, la solution consiste à définir la page de code par défaut de la console Windows Bitvise SSH sur 437. Cela peut être fait dans le Registre, plus précisément dans la clé HKCU\Console\Bitvise toterms.exe, où il y a un CodePage à définir sur 437 (décimal). J'ai également supprimé FaceName car il ne semble pas nécessaire du tout.

description de l'image

Cependant, le simple fait de le définir ne suffit pas, car j'ai remarqué que chaque fois qu'une session Bitvise SSH démarre, la valeur est réinitialisée sur 936. Par conséquent, j'ai dû modifier les autorisations de HKCU\Console\Bitvise toterms.exe pour refuser l'accès en écriture à tout le monde. Étapes : 1. Cliquez avec le bouton droit sur "Bitvise toterms.exe", puis cliquez sur "Permissions...". Dans la boîte de dialogue, cliquez sur Avancé. Dans la nouvelle boîte de dialogue, cliquez sur "Ajouter...", puis saisissez "Everyone". Enfin, cochez les autorisations suivantes pour les refuser comme indiqué :

description de l'image

De cette manière, le serveur Bitvise SSH lui-même ne pourra plus modifier ces valeurs, et j'ai ainsi obtenu la sortie correcte de mes sessions Bitvise SSH.

Enfin, Oh My Zsh a le même aspect qu'il passe par le serveur Bitvise SSH ou non.

description de l'image

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X