Wie bekomme ich ein farbiges Terminal über ssh?


53

Wenn ich über ssh eine Verbindung zu Remote-Hosts herstelle, ist alles nur eine einzige Schriftart / Farbe. Ich möchte Farben haben, wie ich sie lokal habe, zB grün für ausführbare Dateien und blau für symbolische Verknüpfungen usw. Und so, dass wenn ich $ git diff auf dem ssh-Host starte, es mir diff mit Farben anzeigt =)


Ist das ein Ubuntu-Server, mit dem Sie sich verbinden?
Stefano Palazzo

@ stefano-palazzo: zu Debian.
Dima

Antworten:


35

Da es sich um xterm auf dem Server handelte, stellte ich fest, dass etwas nicht stimmte .bashrc

Und in der Tat! ls --color=autofunktioniert nur, wenn Sie mit TTY verbunden sind. Ändern alles einfach --colorin .bashrcauf dem Remote - Host und alles ist in schönen Farben jetzt.


42
Es würde dieser Antwort sehr helfen, wenn Sie sagen, wo Sie --color = auto setzen. .bashrc auf dem Server? Welche Befehle?
Rfay

8
Da dies eine alte Frage ist, die immer noch relevant ist, wollte ich nur hinzufügen, dass auf Ubuntu-Systemen die Standardeinstellung .bashrc eine case-Anweisung enthält, die definiert, welche Begriffe in Farbe zulässig sind. Wenn Sie die Zeile "case" $ TERM $ "in" in Ihrem .bashrc finden, fügen Sie "xterm) color_prompt = yes ;;" aktiviert auch Farbe. Sie können auch die Zeile "force_color_prompt = yes" auskommentieren, um sie global immer zu aktivieren.
Mike E

2
es war Mike E 's Kommentar, der es für mich
reparierte

3
Ich bin verwirrt. Was bedeutet es, "alles einfach in --color umzuwandeln"? Kann ich ein Beispiel sehen?
still_dreaming_1

1
Sprechen Sie über den lokalen Host, den Remote-Host oder beides?
Adam

19

Das hat bei mir funktioniert:

ssh -t my_host my_command

-twar der Schlüssel. Erklärt .


Dies funktioniert perfekt und ist sehr praktisch für einmalige Aufgaben. Vielen Dank!
XtraSimplicity

Ich habe das Kolorieren verloren, als ich den su -Befehl in der SSH-Verbindungsaufforderung gab
Dubis

10

Scheint ~/.bashrc, als wären für mich bereits Farben eingestellt und das Problem ist, dass ssh die bashrc-Datei nicht verwendet. Sie können bashrc in Ihrer ssh-Sitzung verwenden, indem Sie Folgendes hinzufügen ~/.bash_profile:

if [ -f ~/.bashrc ]; then
      . ~/.bashrc
fi

1
Dies funktionierte für mich und war ein einfacher und effizienter Weg, es zu erledigen!
Flith

7

Was ist der Inhalt Ihrer XTERM-Umgebungsvariablen auf dem Server, wenn Sie eine Verbindung herstellen?

~ > export | grep -i term
TERM=xterm

$ export | grep -i term declare -x TERM = "xterm"
Dima

4

In meinem Fall bestand der fehlende Teil aus farbigen ls, grep usw., die durch Hinzufügen von Aliasen zur .bashrc-Datei hinzugefügt werden können:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

usw.


2

Ich habe versucht, die ~./bashrcEinstellungen zu ändern (sowohl auf dem lokalen als auch auf dem Remote-Server), aber es schien nicht zu funktionieren.

Dann ist mir aufgefallen, dass ~/.bashrcder Remoteserver nicht mal ausgeführt wird, wenn ich ihn über ssh verbinde. Also habe ich aus ~/.bashrcRemote-Server gemacht, um per Puttinng if [ -f ~/.bashrc ]; then . ~/.bashrc fiin Remote-Server's~/.bash_profile auszuführen . (basierend auf https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Für diese Lösung mussten keine ~/bashrcDateien direkt geändert werden, aber die ~/bash_profileDatei des Remoteservers musste geändert werden, damit die ~/bashrcDatei des Remoteservers ausgeführt wurde.


Ubuntu verwendet .profileund nicht .bash_profilestandardmäßig, und der Standard .profileist Quelle .bashrc.
muru

Das ist richtig. Aber wird .profilees standardmäßig ausgeführt, wenn man sich über ssh anmeldet?
Chris544

Ja. Vorausgesetzt, Sie haben es nicht mit überschrieben .bash_profile, wird Bash ausgeführt, .profilewenn es als Anmeldeshell gestartet wird. Und SSH startet Bash als Login-Shell.
muru

Es ist richtig, dass ~/.profilenicht gelesen wird, wenn ~/.bash_profilevorhanden. Aber gibt es nicht ~/.bash_profilestandardmäßig auf Ubuntu?
Chris544

Siehe meinen ersten Kommentar noch einmal. Nein, das tut es nicht. Ubuntu verwendet .profile.
muru

2

Da die Farben beim direkten Einloggen einwandfrei funktionierten, habe ich nur die Zeile force_color_prompt=yesin der Datei auskommentiert ~/.bashrc, die mir auch Farben über ssh gab:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

(Ubuntu 18.04 LTS)


Upvoted scheint dies die einfachste Lösung zu sein.
Snwflk

1

In meiner Situation habe ich vor kurzem installiert chef-localund es hat mich gebeten, eine Zeile hinzuzufügen .bash_profile. Wenn ich mich anmelde, wird .bashrcnie mehr geladen, weil es gesehen hat .bash_profile.

Was ich getan habe, war eine Zeile hinzuzufügen in .bash_profile:

source .bashrc
export PATH="/opt/chefdk/embedded/bin:$PATH"

Ich loggte mich aus und wieder ein und bekam sofort mein farbiges Terminal.


0

Es gibt einen Kommentar von "Mike E" darüber, der die Antwort für mich enthielt, aber es ist nicht nur schwer zu lesen, es ist auch schwer herauszufinden, was er bedeutet, wenn man nicht .bashrcviel benutzt - und ich weiß nicht. ' t.

Nachdem ich ein bisschen herumgeschraubt hatte, erhielt ich die gewünschten Ergebnisse, indem ich die folgenden Zeilen ~/.bashrcauf dem Computer änderte, auf dem ich mich mit ssh anmeldete:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

zu:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
    xterm) color_prompt=yes;;
esac

Ich denke, ich hätte einfach "| xterm" nach "color" in der ersten Zeile einfügen können, oder mich umsehen und herausfinden, warum ssh "xterm" anstelle von "xterm-color" verwendete, und das ändern, aber das funktioniert und ich habe jetzt andere Dinge zu tun.


0

Ich habe beim Herstellen einer Verbindung über einen Proxy meine Farbe verloren, weil TERM=dumbich Folgendes behoben habe:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"

1
Sie sollten auch bei der ersten Verbindung ein Terminal zuweisen, wenn Sie dies tun möchten.
muru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.