Как получить цветной терминал через ssh?


53

Когда я подключаюсь через ssh к удаленным хостам, все становится одним шрифтом / цветом. Мне бы хотелось, чтобы у меня были цвета, например, локально, например, зеленый для исполняемого файла и синий для символических ссылок и т. Д. И чтобы при запуске $ git diff на хосте ssh он отображал diff с цветами =)


Это сервер Ubuntu, к которому вы подключаетесь?
Стефано Палаццо

@ stefano-palazzo: в Debian.
Дима

Ответы:


35

Поскольку на сервере был xterm, я понял, что что-то не так с .bashrc

И действительно! ls --color=autoработает только когда вы подключены к TTY. Изменение все , чтобы просто --colorв .bashrcна удаленном хосте , и все это в красивых цветов в настоящее время.


42
Этот ответ очень помог бы, если бы вы сказали, куда ставите --color = auto. .bashrc на сервере? Какие команды?
rfay

8
Так как это старый вопрос, который все еще актуален, я просто хотел добавить, что в системах Ubuntu по умолчанию .bashrc имеет оператор case, который определяет, какие термины имеют допустимый цвет. Если вы обнаружите строку "case" $ TERM $ "in" в вашем .bashrc, добавив "xterm) color_prompt = yes ;;" также включит цвет. Также вы можете раскомментировать строку «force_color_prompt = yes», чтобы всегда включить ее глобально.
Майк Э

2
это был комментарий Майка Э, который исправил это для меня,
Фрэнк Шрайвер,

3
Я не совсем понимаю. Что значит «изменить все на просто - цвет»? Могу ли я увидеть пример?
still_dreaming_1

1
Вы, ребята, говорите о локальном хосте, удаленном хосте или обоих?
Адам

19

Это сработало для меня:

ssh -t my_host my_command

-tбыл ключ Разъяснения .


Это отлично работает и очень удобно для разовых задач. Спасибо!
XtraSimplicity

Я потерял colorize, когда я сделал su -команду в приглашении соединения ssh
Дубис

10

Кажется, что цвета уже были установлены ~/.bashrcдля меня, и проблема в том, что ssh не использует файл bashrc. Вы можете использовать bashrc в своей сессии ssh, добавив следующее ~/.bash_profile:

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

1
Это сработало для меня, и было простым и эффективным способом сделать это!
flith

7

Каково содержимое вашей переменной enter XTERM на сервере при подключении к ней?

~ > export | grep -i term
TERM=xterm

$ экспорт | grep -i термин объявлять -x TERM = "xterm"
Дима

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делает источник .bashrc.
Муру

Это верно. Но .profileвыполняется ли по умолчанию при входе через ssh?
chris544

Да. При условии, что вы не переопределяете его .bash_profile, bash запускается .profileпри запуске в качестве оболочки входа в систему. И SSH запускает bash в качестве оболочки для входа.
Муру

Это правильно, что ~/.profileне читается, если ~/.bash_profileсуществует. Но не ~/.bash_profileсуществует в Ubuntu по умолчанию?
chris544

Смотрите мой первый комментарий снова. Нет, это не так. Ubuntu использует .profile.
Муру

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много - и я не т.

Немного покатавшись, я получил желаемые результаты, изменив следующие строки ~/.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» после «color» в первой строке или покопаться и выяснить, почему ssh использовал «xterm» вместо «xterm-color», и изменить это, но это работает, и я есть другие дела сейчас.


0

Я терял свой цвет при подключении через прокси, потому TERM=dumbчто я исправил это:

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

1
Вы должны также выделить терминал на первом соединении, если вы собираетесь это сделать.
Муру
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.