¿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 =)

Dima
fuente
¿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.

Dima
fuente
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ó .

juanpastas
fuente
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
Dariusz Gorczynski
fuente
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
Vedran Krivokuća
fuente
$ 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.

Stuart Clark
fuente
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.

chris544
fuente
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)

hinneLinks
fuente
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.

Kevin
fuente
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.

Mike Wise
fuente
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'"
ErichBSchulz
fuente
1
También debe asignar un terminal en la primera conexión, si va a hacer eso.
muru