¿Cómo obtener un terminal de color sobre ssh?


53

Cuando me conecto a través de ssh a hosts remotos, todo es solo una fuente / color. Me gustaría tener colores como lo hago localmente, por ejemplo, verde para ejecutable y azul para enlaces simbólicos, etc. Y de modo que cuando ejecuto $ git diff en el host ssh me muestra diff con colors =)


¿Es ese un servidor Ubuntu al que te estás conectando?
Stefano Palazzo

@ stefano-palazzo: a Debian.
Dima

Respuestas:


35

Debido a que era xterm en el servidor, pensé que algo estaba mal con .bashrc

¡Y de hecho! ls --color=autofunciona solo cuando está conectado a TTY. Cambiando todo a simplemente --coloren .bashrcel host remoto y todo está en bonitos colores ahora.


42
Ayudaría mucho a esta respuesta si dijeras dónde pones --color = auto. .bashrc en el servidor? Que comandos
rfay

8
Dado que esta es una vieja pregunta que aún es relevante, solo quería agregar que en los sistemas Ubuntu, el .bashrc predeterminado tiene una declaración de caso que define qué términos tienen permitido el color. Si encuentra la línea "case" $ TERM $ "en" en su .bashrc, agregue "xterm) color_prompt = yes ;;" también habilitará el color. También puede descomentar la línea "force_color_prompt = yes" para habilitarla globalmente siempre.
Mike E

2
que fue el comentario de Mike E 's que lo fijó para mí,
Frank Schrijver

3
Estoy confundido. ¿Qué significa "cambiar todo a simplemente --color"? ¿Puedo ver un ejemplo?
still_dreaming_1

1
¿Están hablando del host local, el host remoto o ambos?
Adam

19

Esto funcionó para mí:

ssh -t my_host my_command

-tFue la clave. Explicó .


Esto funciona perfectamente y es muy conveniente para tareas puntuales. ¡Gracias!
XtraSimplicity

Perdí el color cuando hice el su -comando en el indicador de conexión ssh
dubis

10

Parece que los colores ya estaban configurados ~/.bashrcpara mí y el problema es que ssh no usa el archivo bashrc. Puede usar bashrc en su sesión ssh agregando lo siguiente a ~/.bash_profile:

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

1
¡Esto funcionó para mí y fue una manera simple y eficiente de hacerlo!
flith

7

¿Cuál es el contenido de su variable env XTERM en el servidor cuando se conecta a él?

~ > export | grep -i term
TERM=xterm

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

4

En mi caso, la parte que faltaba era tener colores ls, grep, etc., que se pueden agregar agregando alias al archivo .bashrc:

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

etc.


2

Intenté cambiar la ~./bashrcconfiguración (tanto en el servidor local como en el remoto), pero no pareció funcionar.

Entonces noté que ~/.bashrcel servidor remoto ni siquiera se ejecuta si me conecto a través de ssh. Así que hice ~/.bashrcun servidor remoto para ejecutar poniendo if [ -f ~/.bashrc ]; then . ~/.bashrc fien el servidor remoto ~/.bash_profile. (basado en https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Entonces, esta solución no requería cambiar ningún ~/bashrcarchivo directamente, pero sí requería cambiar el ~/bash_profilearchivo del servidor remoto para que ese ~/bashrcarchivo del servidor remoto se ejecutara.


Ubuntu usa .profiley no .bash_profilede forma predeterminada, y el valor predeterminado .profilees fuente .bashrc.
Muru

Eso es correcto. ¿Pero .profilese ejecuta de forma predeterminada al iniciar sesión a través de ssh?
chris544

Si. Siempre que no lo haya anulado usando .bash_profile, bash se ejecuta .profilecuando se inicia como un shell de inicio de sesión. Y SSH comienza bash como un shell de inicio de sesión.
Muru

Es correcto que ~/.profileno se lea si ~/.bash_profileexiste. ¿Pero no ~/.bash_profileexiste en Ubuntu por defecto?
chris544

Ver mi primer comentario nuevamente. No lo hace Ubuntu utiliza .profile.
Muru

2

Como los colores funcionaban bien mientras se iniciaba sesión directamente, simplemente eliminé el comentario de la línea force_color_prompt=yesen el archivo ~/.bashrc, que también me dio colores sobre ssh:

# 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)


Votado, esta parece ser la solución más directa.
snwflk

1

En mi situación, instalé recientemente chef-localy me pidió que agregue una línea .bash_profile. Cuando inicio sesión, .bashrcnunca se carga más, porque vio .bash_profile.

Lo que hice fue agregar una línea en .bash_profile:

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

Salí y volví a entrar y obtuve mi terminal de color de inmediato.


0

Hay un comentario de "Mike E" arriba que contenía la respuesta para mí, pero no solo es difícil de leer, es un poco difícil entender lo que quiere decir si no usas .bashrcmucho, y yo no ' t.

Después de jugar un poco, obtuve los resultados deseados al cambiar las siguientes líneas en ~/.bashrc la máquina en la que estaba iniciando sesión con ssh:

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

a:

# 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

Estoy pensando que podría haber agregado "| xterm" después de "color" en la primera línea, o buscar y descubrir por qué ssh estaba usando "xterm" en lugar de "xterm-color" y cambiar eso, pero esto funciona y yo Tiene otras cosas que hacer ahora.


0

Estaba perdiendo mi color cuando me conectaba a través de un proxy porque TERM=dumblo arreglé:

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

1
También debe asignar un terminal en la primera conexión, si va a hacer eso.
muru
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.