"Error opening terminal" und "unknown terminal type" bei SSH beheben

SSH sendet den lokalen TERM-Wert an den Server, und der Server hat keinen terminfo-Eintrag mit diesem Namen. Programme wie nano, htop und clear wissen dann nicht, wie sie Ihr Terminal ansteuern sollen. Kopieren Sie den Eintrag mit infocmp -x | ssh server -- tic -x -. Oder verbinden Sie sich für eine schnelle Lösung mit ssh -o SetEnv=TERM=xterm-256color server. Beides funktioniert ohne root.

Lieber eine Einstellung statt einer Korrektur auf jedem Server? In Wardterm wählen Sie, welchen Terminaltyp jeder Server erfährt. Zeigen

Aktualisiert am . Meldungen und Lösungen reproduziert mit OpenSSH 10.3 unter macOS und einem Wegwerf-Debian-13-Server mit OpenSSH 10.0, mit TERM auf Namen gesetzt, die auf diesem Server fehlten, und nach Entfernen von xterm-256color dort.

Die Meldungen

Alle haben dieselbe Ursache. Jedes Programm meldet sie auf seine Weise:

ProgrammAusgabe
nano, htopError opening terminal: xterm-256color.
clear'xterm-256color': unknown terminal type.
tputtput: unknown terminal "xterm-256color"
tmuxmissing or unsuitable terminal: xterm-256color
lessWARNING: terminal is not fully functional

Eine andere Meldung, TERM environment variable not set., bedeutet, dass die Sitzung gar kein Terminal hat, etwa bei einem Befehl mit ssh server clear. Fügen Sie in diesem Fall -t hinzu. Siehe -t und -T.

Die Ursache bestätigen

Auf dem Server, nach der Anmeldung:

echo "$TERM"
infocmp "$TERM" > /dev/null; echo $?

Ein Fehlschlag sieht so aus:

infocmp: error: no match in terminfo database for terminal type "xterm-256color"

Neuere Terminals bringen oft einen eigenen TERM-Namen mit, und viele Server kennen ihn nicht. Ein fehlendes xterm-256color ist seltener und deutet auf ein minimales Image oder einen Container hin, in dem die terminfo-Dateien weggelassen wurden.

Lösung 1: den Eintrag auf den Server kopieren

Führen Sie das auf Ihrem eigenen Rechner aus, in dem Terminal mit dem Problem. root wird nicht gebraucht:

infocmp -x | ssh user@server -- tic -x -

infocmp -x gibt den Eintrag für Ihr aktuelles TERM aus, und tic kompiliert ihn auf dem Server nach ~/.terminfo. Sie behalten alle Funktionen Ihres Terminals, und die Lösung hält auch bei künftigen Anmeldungen. Warnungen von tic sind meist harmlos, testen Sie es also nach einer neuen Anmeldung:

clear
tput cols

Es gilt nur für diesen einen Benutzer. Damit es für alle funktioniert, auch für root unter sudo, installieren Sie es als root aus einer Datei, was in einen Systemordner schreibt:

infocmp -x > term.ti
scp term.ti user@server:
ssh -t user@server 'sudo tic -x term.ti'

Antwortet tic auf dem Server mit Fehlern wie Illegal character, ist das infocmp Ihres Macs zu alt. Das betrifft macOS vor Sonoma: Nehmen Sie das aus dem Homebrew-Paket ncurses.

Lösung 2: einen gängigen Namen senden

Nutzen Sie das, wenn Sie auf dem Server nichts schreiben können, etwa bei einem gemeinsamen Konto oder einem Gerät. Für eine Verbindung:

ssh -o SetEnv=TERM=xterm-256color user@server

Oder dauerhaft für diesen Host in ~/.ssh/config:

Host legacy
  HostName 203.0.113.10
  SetEnv TERM=xterm-256color

Weitere Optionen pro Host finden Sie in diesen Beispielen für die SSH-Config-Datei.

Der Server braucht dafür keine AcceptEnv-Zeile, da TERM die Ausnahme von dieser Regel ist. Auf Ihrem Client wird OpenSSH 8.7 oder neuer gebraucht. Setzen Sie es bei älteren Clients für den Befehl:

TERM=xterm-256color ssh user@server

Ihre Sitzung läuft dann als einfaches xterm. Fast alles funktioniert, aber Funktionen, die Ihrem Terminal eigen sind, etwa formatierte Unterstreichungen, nicht.

Sind Sie bereits angemeldet, funktioniert dies für die aktuelle Shell:

export TERM=xterm-256color

Lösung 3: das Paket installieren

Distributionen liefern zusätzliche Einträge in einem eigenen Paket. Unter Debian und Ubuntu:

sudo apt install ncurses-term

Unter Debian 13 kamen damit viele Einträge hinzu, aber nicht die einiger neuerer Terminals, die in eigenen Paketen liegen. Unter Alpine suchen Sie nach ncurses-terminfo. Für ein Terminal, das das Paket nicht abdeckt, nehmen Sie Lösung 1.

Das Problem nicht in der Shell-Konfiguration verstecken

Setzen Sie TERM bedingungslos in ~/.bashrc, zerstört das richtige Werte bei jeder künftigen Anmeldung, auch in tmux. Müssen Sie es dort setzen, tun Sie es nur, wenn der aktuelle Wert unbekannt ist:

infocmp "$TERM" >/dev/null 2>&1 || export TERM=xterm-256color

Fragen

Welcher TERM-Wert funktioniert auf den meisten Servern?

xterm-256color ist auf fast jedem aktuellen Linux-Server vorhanden. Auf sehr alten oder minimalen Systemen sind xterm oder vt100 sicherer.

Brauche ich root, um unknown terminal type zu beheben?

Nein. infocmp -x | ssh user@server -- tic -x - installiert den Eintrag in ~/.terminfo für Ihren Benutzer. root brauchen Sie nur, um ihn für alle Benutzer zu installieren.

Warum meldet tmux missing or unsuitable terminal?

Der Server hat keinen terminfo-Eintrag für Ihren TERM. Es helfen dieselben Lösungen: den Eintrag kopieren oder mit einem gängigen Namen wie xterm-256color verbinden.

Quellen

Mehr zu Fehlermeldungen

Alle Anleitungen