如何通过ssh获得彩色终端?


53

当我通过ssh连接到远程主机时,所有内容都只是一个字体/颜色。我想像本地一样使用颜色,例如,绿色表示可执行文件,蓝色表示符号链接等。因此,当我在ssh主机上运行$ git diff时,会向我显示diff with colors =)


这是您要连接的Ubuntu服务器吗?
Stefano Palazzo

@ stefano-palazzo:Debian。
Dima 2010年

Answers:


35

因为它是服务器上的xterm,所以我发现问题出在 .bashrc

的确如此!ls --color=auto仅在您连接到TTY时有效。将所有内容更改为仅--color.bashrc远程主机上即可,并且现在所有内容都具有漂亮的颜色。


42
如果您说--color = auto放在哪里,它将对这个答案有很大帮助。.bashrc在服务器上?什么命令?
rfay

8
由于这是一个仍然存在的老问题,我只想在Ubuntu系统上添加一个问题,默认.bashrc有一个case语句,该语句定义了允许使用哪些术语作为颜色。如果您在.bashrc中找到“ case“ $ TERM $” in“行,请添加” xterm)color_prompt = yes ;;“。也将启用颜色。您也可以取消注释“ force_color_prompt = yes”行以始终全局启用它。
Mike E

2
是Mike E的评论为我解决了这一问题
Frank Schrijver

3
我糊涂了。“将所有内容更改为简单的--color”是什么意思?我可以看个例子吗?
still_dreaming_1

1
你们是在谈论本地主机,远程主机还是两者?
亚当


10

好像已经~/.bashrc为我设置了颜色,问题是ssh不使用bashrc文件。您可以在ssh会话中使用bashrc,方法是~/.bash_profile

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

1
这对我有用,并且是一种简单有效的方法!
flith


4

就我而言,缺少的部分是彩色的ls,grep等,可以通过向.bashrc文件中添加别名来添加它们:

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

等等


2

我尝试更改~./bashrc设置(在本地和远程服务器上),但似乎不起作用。

然后我注意到,~/.bashrc如果我通过ssh连接到远程服务器,它甚至都不会执行。因此,我将~/.bashrc远程服务器制成要通过放置if [ -f ~/.bashrc ]; then . ~/.bashrc fi在远程服务器的~/.bash_profile(基于https://stackoverflow.com/questions/820517/bashrc-at-ssh-login)。

因此,此解决方案不需要~/bashrc直接更改任何文件,但需要更改~/bash_profile远程服务器的~/bashrc文件,以便执行远程服务器的文件。


Ubuntu 默认使用.profile而不是.bash_profile,默认情况下.profile使用source .bashrc
大师

那是对的。但是.profile通过ssh登录时默认情况下会执行吗?
chris544

是。前提是您没有使用覆盖它.bash_profile,则bash .profile作为登录shell启动时会运行。SSH将bash作为登录shell启动。
muru

~/.profile如果~/.bash_profile存在,则不读取是正确的。但是~/.bash_profile默认情况下在Ubuntu 上不存在吗?
chris544

再次看到我的第一条评论。不,不是。Ubuntu使用.profile
muru

2

由于在直接登录时颜色可以正常工作,所以我只是取消注释force_color_prompt=yes了文件中的行~/.bashrc,这也给了我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)


赞成,这似乎是最直接的解决方案。
snwflk

1

在我的情况下,我最近安装了chef-local它,并要求我在上添加一行.bash_profile。登录后,.bashrc再也不会加载了,因为它看到了.bash_profile

我所做的是在中添加一行.bash_profile

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

我注销并重新登录,立刻获得了彩色终端。


0

上面的“ Mike E”中有一条评论为我提供了答案,但不仅难以阅读,而且如果您不经常使用,很难弄清楚他的意思.bashrc-我不会t。

拧了一下之后,通过在~/.bashrc使用ssh登录的机器上更改以下几行,我得到了所需的结果:

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

至:

# 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

我想我可以在第一行中的“颜色”之后添加“ | xterm”,或者挖出并弄清楚ssh为什么使用“ xterm”而不是“ xterm-color”并进行更改,但这有效并且我现在还有其他事情要做。


0

通过代理连接时,我的颜色消失了,因为TERM=dumb我修复了它:

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

1
如果要这样做,也应该在第一个连接上分配一个终端。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.