dropbear: Env-Variable von lokalem Rechner wird übertragen

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
660
Punkte für Reaktionen
4
Punkte
18
Hallo zusammen,

wenn ich mich mit meine ssh Client (OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011) auf die Fritzbox verbinde, wird auf der Box immer der Variable $TERM der Wert aus der lokalen Umgebung zugewiesen.

Das ist unverständlich, weil
1. mein Client standardmäßig keine Env-Variablen sendet
2. dropbear keine Env-Variablen aus der lokalen Shell akzeptiert
und
3. mit ssh -vvv klar ersichtlich ist, dass der Client definitiv nicht versucht, die Variable zu senden:
Code:
debug3: Ignored env TERM
Weiß jemand woran das liegt und wie ich es verhindern kann?

Klar, ich könnte $TERM in der profile wieder berschreiben, aber das ist wohl eher ein hack als eine saubere Lösung.

Danke im Voraus und Gruß
maeis
 

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
0
Punkte
36
TERM wird immer übertragen, wie es aussieht. Das hat nichts mit der Fritz!Box zu tun. Egal, ob ich mich von Ubuntu auf FB, FB auf Ubuntu, Ubuntu auf Ubuntu verbinde, die Variable wird trotz der Debug-Zeile "Ignored env TERM" immer übertragen. Das macht doch auch Sinn irgendwie, denn Du sitzt ja immer noch am selben Terminal wie zuvor und nutzt dessen Fähigkeiten.

In Freetz wird TERM normalerweise in /etc/profile auf den Wert "xterm" gesetzt, falls die Variable leer ist. Also sorg einfach dafür, daß dem so ist, falls es das ist, was Du möchtest:
Code:
TERM="" ssh fritz.box -l root
Oder setze die Variable auf der Box in ~/.profile, je nachdem, was Dir lieber ist.

Edit: Der OpenSSH-Quelltext zeigt, daß die Debug-Zeile für jeder Variable aus dem lokalen Environment ausgegeben wird, die nicht explizit in der OpenSSH-Option SendEnv genannt wird. Das könnte man als kleinen Bug im Logging-Code bezeichnen. Es ändert aber nichts daran, daß TERM gesendet wird, Logging oder nicht.

Übrigens würde Dropbear als SSH-Client TERM auf den Wert "vt100" setzen, falls die Variable im Environment undefiniert wäre (einfach mal mit unset TERM probieren). Das nur nebenbei, habe ich auch im Quellcode gesehen.
 
Zuletzt bearbeitet:

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
660
Punkte für Reaktionen
4
Punkte
18
Hallo kriegaex,

Danke für Deine Informationen.

TERM wird immer übertragen [...]
Das macht doch auch Sinn irgendwie, denn Du sitzt ja immer noch am selben Terminal wie zuvor und nutzt dessen Fähigkeiten.
Anscheinend wird TERM tatsächlich "immer" übertragen.

Merkwürdig finde ich dabei, dass dropbear das überhaupt übernimmt, da Env-Variablen, die mit "SendEnv" übertragen werden sollen, eben nicht übernommen werden.
dropbear scheint das also generell nicht zu unterstützen oder ist entsprechend kompiliert bzw. konfiguriert.

Sinn mach die Übertragung von TERM indes m. E. nicht in jedem Fall.
Es führt nämlich dazu, dass der TERM einen Wert enthält, der von der Shell auf dem entfernten System (hier die FritzBox) nicht unterstützt wird.

In meinem Fall führt es insbesondere dazu, dass in der bash "ctrl-l" nicht zum clear-screen führt (Falls Du Dich erinnerst, hatten wir vor Jahren mal einen Thread zu diesem Thema).
Das liegt daran, dass ich lokal xterm-256color verwende.
Vermutlich sollte man bei ssh, telnet etc. generell darauf achten, dass beide Rechner den selben Terminal type verwenden.


...
Edit: Der OpenSSH-Quelltext zeigt, daß die Debug-Zeile für jeder Variable aus dem lokalen Environment ausgegeben wird, die nicht explizit in der OpenSSH-Option SendEnv genannt wird. Das könnte man als kleinen Bug im Logging-Code bezeichnen. Es ändert aber nichts daran, daß TERM gesendet wird, Logging oder nicht.
...
Nur der Vollständigkeit halber:
Der OpenSSH-Client versucht bei mir LANG zu senden, obwohl ich SendEnv nicht verwendet hatte.
Laut manpages sollte das auch nicht sein.

Im Grunde ist das alles kein wirkliches Problem, da man ja TERM leicht auf den gewünschten Wert setzen kann.
Ich bin über das "clear-screen"-Problem in der bash auf das Thema gestoßen und versuche, die Zusammenhänge zu verstehen.
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Zumindest bei Freetz (und wir sind hier bei Freetz) kannst Du bei der Erstellung auswählen, welche Terminal-Beschreibungen auf der Box installiert werden sollen. Da man normalerweise nur eine überschaubare Anzahl von Terminal-Einträgen verwendet, sollte das kein Problem sein.
Generell ist es sinnvoll, TERM zu übertragen, denn das Terminal verändert sich ja nicht. Auf einem normalen Server sollten auch alle Terminals vorhanden sein, so dass das kein Problem ist. Auch bei Freetz kann man die benötigten Terminals installieren, alternativ kann man in /etc/profile oder ~/.profile etwas eintragen, das ungültige Terminal Einträge in vorhandene Einträge umsetzt.

Der Dropbear Server unterstützt keine konfigurierbare Liste von Environment Variablen, aber TERM gehört zu den Werten, die gesetzt werden, wenn sie vom Client übergeben werden. Siehe svr-chansession.c:execchild.

So wie es aussieht, ist die Dokumentation des OpenSSH Clients unvollständig, dort steht im Abschnitt ENVIRONMENT nicht von TERM oder LANG.