Як отримати кольоровий термінал над ssh?


53

Коли я підключаю через ssh до віддалених хостів, все є лише одним шрифтом / кольором. Я хотів би мати кольори, як у мене локально, наприклад, зелений для виконуваного файлу та синій для символьних посилань тощо.


Це сервер Ubuntu, до якого ви підключаєтесь?
Стефано Палаццо

@ stefano-palazzo: на Debian.
Діма

Відповіді:


35

Оскільки це було xterm на сервері, я зрозумів, що щось не так .bashrc

І справді! ls --color=autoпрацює лише тоді, коли ви підключені до TTY. Зміна все просто --colorв .bashrcна віддалений хост , і все це в красивих квітів в даний час.


42
Дуже допоможе ця відповідь, якби ви сказали, куди ставите --color = auto. .bashrc на сервері? Які команди?
rfay

8
Оскільки це старе питання, яке все ще актуальне, я просто хотів додати, що для систем Ubuntu за замовчуванням .bashrc має випадок, який визначає, для яких термінів дозволений колір. Якщо ви знайдете рядок "case" $ TERM $ "в" у вашому .bashrc, додавши "xterm) color_prompt = так ;;" також включить колір. Також ви можете коментувати рядок "force_color_prompt = так", щоб увімкнути її завжди в усьому світі.
Майк Е

2
саме коментар Майка Е зафіксував це для мене,
Френк Шрівер

3
Я збентежений. Що означає "змінити все просто - кольором"? Чи можу я побачити приклад?
still_dreaming_1

1
Ви, хлопці, говорите про місцевого господаря, віддаленого хоста чи про обох?
Адам

19

Це працювало для мене:

ssh -t my_host my_command

-tбуло ключовим. Пояснив .


Це прекрасно працює і дуже зручно для разових завдань. Дякую!
XtraSimplicity

Я втратив колорит, коли su -командував у підказці ssh-з'єднання
dubis

10

Схоже, кольори ~/.bashrcдля мене вже були встановлені , і проблема полягає в тому, що ssh не використовує файл bashrc. Ви можете використовувати bashrc у своєму сеансі ssh, додавши наступне до ~/.bash_profile:

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

1
Це працювало для мене, і це був простий та ефективний спосіб зробити це!
фліт

7

Який зміст вашої змінної XTERM env на сервері під час підключення до нього?

~ > 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віддалений сервер для виконання puttinng 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

Зверху є коментар з "Майка Е", який містив для мене відповідь, але його не тільки важко читати, це важко зрозуміти, що він означає, якщо ти .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.