Bitvise SSH Server mette spazi aggiuntivi in ​​sessione


1

Sto usando Bitvise SSH Server sul mio computer Windows per l'accesso remoto. La shell di login è ZSH, e sto usando Oh My Zsh con esso. Tuttavia, ho anche provato BASH e ho avuto lo stesso problema. Quindi penso che questo problema sia con il server SSH di Bitvise, non con le mie shell Cygwin o con gli emulatori di terminale lato client.

Il problema può essere notato sul prompt del mio ZSH. Finché la mia sessione SSH passa attraverso questo server SSH Bitvise, ci saranno degli spazi in più nel prompt. Si prega di vedere gli screenshot:

Differences between a session that goes through Bitvise and one that doens't

Questa finestra è il MinTTY su quella macchina Windows. Quando lo apro, puoi vedere che c'è solo uno spazio finale dopo ~ (prima di digitare ssh 127.0.0.1 ). Tuttavia, una volta inserito SSH nella stessa macchina, ci sono due spazi finali dopo ~ nel prompt. Inoltre, se faccio un'altra sessione SSH (al tiger macchina) all'interno della sessione SSH di Bitvise, il prompt del secondo ha anche spazi aggiuntivi (prompt sottolineati rossi). Comunque se esco dalla sessione di Bitvise e SSH a tiger, direttamente, il prompt è normale (prompt sottolineati verdi).

Ho osservato la stessa cosa quando mi collegavo da una macchina remota (usando gnome-terminal o xfce4-terminal come emulatore di terminale) su quella macchina Windows.

Pertanto, la mia conclusione è, l'emulatore di terminale non è la colpa per questo. Anche il Cygwin e il suo ZSH non sono da biasimare, perché tutto sembra a posto finchè non passo attraverso Bitvise.

La mia ipotesi è che ci sia un personaggio speciale definito nel tema Oh My Zsh che non viene elaborato correttamente quando passa attraverso Bitvise. Tuttavia non ho potuto scoprire cosa sia esattamente. I temi Oh My Zsh hanno un bell'aspetto a livello locale senza una connessione SSH di Bitvise, e hanno un bell'aspetto su tutte le macchine Linux che ho. Quindi penso che dovrebbe essere qualcosa con Bitvise.


Come suggerito nei commenti, ho corso set in entrambi gli ambienti e ha ottenuto gli output scaricati in due file di testo: bitvise.txt e local.txt . Ora il problema più grande è che non posso confrontarli usando diff perché diff afferma che sono file binari (e differiscono). Non sono sicuro che questo abbia qualcosa a che fare con gli spazi strani.

forzatura LANG sopra diff non ha aiutato

$ diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ

$ LANG=en_US.UTF-8 diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ

$ LANG=C diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ

I due file sono caricati qui: https://drive.google.com/open?id=0B6Pxoys5MF0Bc1d6QUMweUkybHc


Testato un po 'diverso TERM impostazioni ... Non sembra fare nulla di buono. Ambientazione TERM=linux risultato lo stesso con xterm.

Different TERM settings


Aggiornato il 23/05/16

Il problema sembra essere più difficile di quanto mi aspettassi. Ho trovato una cartella "C: \ Programmi \ Bitvise SSH Server \ TermInfo" che contiene i file di informazioni del terminale. Ho sostituito i file in quella cartella con i file simili che ho copiato da una normale macchina Ubuntu, ma non mi ha aiutato. Ho anche provato le informazioni sul termine "cygwin" che sono state installate con Cygwin, senza fortuna ... In realtà il file "cygwin" che viene fornito con Cygwin è lo stesso con quello fornito con Ubuntu ...

Ora sono a corto di idee.

Quando eseguo SSH nel server SSH di Bitvise, posso farlo exec /bin/bash per sostituire la sessione corrente con Bash. Tuttavia, in questo Bash, se eseguo SSH in un altro computer Linux che utilizza Zsh e Oh My Zsh, lo stesso problema persiste.


uso set per scaricare le impostazioni complete nei diversi casi. Può essere che tu possa trovare una discrepanza
matzeri

@matzeri Finalmente ho avuto il tempo di fare questo ... l'ho fatto set > local.txt localmente e fatto set > bitvise.txt in una sessione SSH a localhost. Ora ho ottenuto i due file, entrambi molto grandi e non esattamente identici. però diff afferma che sono file binari quindi non emettono differenze nelle righe ... Sto ancora cercando di capire un modo per questo ...
bfrguci

locale diverso? vedere man iconv per la conversione
matzeri

@matzeri Non sembrano locali diversi perché sono entrambi in UTF-8 quando li apro con Sublime Text ... Sono troppo grandi per diff (o troppe differenze)?
bfrguci

diff può gestire file enormi e tutti i file diversi. Se si lamenta di binario o il tuo locale non è UTF8 o uno dei caracther non è un UTF8 valido. Puoi anche provare LANG=C diff -uN file1 file2 o LANG=en_US.UTF-8 diff -uN file1 file2
matzeri

Risposte:


1

Una possibilità è che Oh My Zsh rende i caratteri Unicode, e che il problema è che quei personaggi hanno larghezze diverse in una console Windows.

Ad esempio, un personaggio con larghezza 0 in MinTTY potrebbe avere la larghezza 1 nella console Windows e avanzare il cursore. Oppure un personaggio con larghezza 1 in MinTTY potrebbe avere la larghezza 2 nella console di Windows.

Negli screenshot che hai fornito, stai guardando zsh con "Oh My Zsh" sotto MinTTY.

Ma cosa succede in una console di Windows? Come ti sembra Oh My Zsh?

Bitvise SSH Server esegue la shell del terminale in una console Windows nascosta, necessaria per eseguire i programmi della console di Windows. A causa di questa architettura, zsh deve guardare bene in una console di Windows per renderizzare correttamente tramite Bitvise SSH Server.


Potresti avere ragione ... Oh My Zsh non sembra corretto nella console di Windows - ma sembra anche diverso da quello che vedo nella sessione di Bitvise.
bfrguci

Se il problema è con la console di Windows, c'è qualche possibile soluzione per questo?
bfrguci

Se Oh My Zsh non sembra corretto nella console di Windows, è probabile che questo problema venga risolto dal manutentore del progetto Oh My Zsh, supponendo che vogliano risolvere il problema. Potrebbe anche essere possibile che la configurazione di Oh My Zsh possa essere modificata per aggirare il problema, ma non ho esperienza per dire se è possibile o no.
denis bider

È possibile che tu non usi il terminale di Windows ma MinTTY o qualcos'altro?
bfrguci

1
Sarebbe teoricamente possibile ma non una buona scelta architettonica per un server SSH Windows che deve fornire l'accesso ai programmi in modalità console Windows, non ultimo PowerShell. MinTTY non funziona bene con PowerShell o con qualsiasi tipo di programma avanzato in modalità console di Windows in generale.
denis bider

1

Quattro settimane dopo ho finalmente capito il problema. Grazie a denis bider chi sembra provenire dal team di supporto di Bitvise SSH Server. La sua spiegazione di come Bitvise esegue le shell nella console di Windows è la chiave per risolvere questo problema.

Si è scoperto il $TREM variabile di ambiente e terminfo i file sono irrilevanti.

Il problema che avevo effettivamente era, i temi Oh My Zsh che sto usando hanno caratteri che vengono visualizzati in altri modi nella mia console di Windows. Tuttavia, ho scoperto che era in realtà perché la mia code page della console di Windows è impostata su 936 (cinese semplificato) a causa delle mie impostazioni locali di Windows (per i caratteri non Unicode). Ho scoperto che se cambio manualmente la mia code page in 437 (inglese degli Stati Uniti) nella sessione SSH di Bitvise, l'output diventa corretto.

Poi ho capito che per gli utenti degli Stati Uniti, non hanno nemmeno questo problema!

Pertanto, la soluzione è impostare la pagina di codice predefinita della console Windows SSQ di Bitvise su 437. Questo può essere fatto in Registro, in particolare, in chiave HKCU\Console\Bitvise toterms.exe, c'è un CodePage essere impostato su 437 (decimale). Ho anche rimosso FaceName perché non sembra affatto necessario.

enter image description here

Tuttavia, impostare questo da solo non è sufficiente, perché ho trovato ogni volta che inizia una sessione SSH di Bitvise, il valore è impostato su 936. Pertanto, ho bisogno di cambiare i permessi di HKCU\Console\Bitvise toterms.exe negare la scrittura dell'accesso da tutti. Passi: 1. Fare clic destro su "Bitvise toterms.exe" e fare clic su "Autorizzazioni ...". Nella finestra di dialogo, fai clic su Avanzate. Nella nuova finestra di dialogo, fai clic su "Aggiungi ...", quindi inserisci "Tutti". Infine, controlla le seguenti autorizzazioni per negato come mostrato:

enter image description here

In questo modo, il server SSH di Bitvise non sarà più in grado di alterare questi valori, quindi ho ottenuto l'output corretto dalle mie sessioni SSH di Bitvise.

Infine, Oh My Zsh ha lo stesso aspetto se passa attraverso Bitvise SSH Server o meno.

enter image description here

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.