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

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

13 ответов

Решение

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

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

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

ssh -t my_host my_command

-t был ключ. Объяснил

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

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

Так как цвета работали нормально при непосредственном входе в систему, я просто раскомментировал строку 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)

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

~ > export | grep -i term
TERM=xterm

В моем случае отсутствующей частью были цветные ls, grep и т. Д., Которые можно добавить, добавив псевдонимы в файл.bashrc:

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

и т.п.

В моей ситуации я недавно установил chef-local и он попросил меня добавить строку в .bash_profile, Когда я войду, .bashrc никогда не загружается больше, потому что он видел .bash_profile,

Что я сделал, чтобы добавить строку в .bash_profile:

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

Я вышел из системы и сразу же получил свой цветной терминал.

Я пытался изменить ~./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 файл удаленного сервера был выполнен.

Есть комментарий от "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", и изменить это, но это работает, и я есть другие дела сейчас.

У меня это сработало: просто откройте файл.bashrc в папке $HOME и раскомментируйте строку force_color_prompt=yes

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

ssh myproxy "ssh [email protected] -p 5000 -tt 'TERM=xterm bash'"

У меня возникла эта проблема после создания нового пользователя в Linux (Ubuntu). Параметр force_color_prompt=yesне сделал это для меня.

Я забыл указать оболочку, поэтому она пошла по умолчанию /bin/sh, перенаправление на /bin/dashвидимо на моем дистрибутиве. При ручной настройке на /bin/bashвсе работало из коробки.

Так что в моем случае я мог бы использовать -sфлаг при добавлении пользователя (так useradd -s /bin/bash ...указать оболочку. Вместо этого я использовал chsh -s /bin/bashустановить его после создания.

      cd
cat << 'EOF' >color_terminals_over_ssh.sh
#!/bin/bash
#Must pass either enable or disable to script
#./color_terminals_over_ssh.sh enable

DO=$1

if [[ $DO = "enable" ]]
then
 sudo sed -i '/force_color_prompt=yes/s/^#//g' /home/*/.bashrc
 sudo sed -i '/force_color_prompt=yes/s/^#//g' /root/.bashrc
 sudo su
elif [[ $DO = "disable" ]]
then
 sudo sed -i '/force_color_prompt=yes/s/^/#/g' /home/*/.bashrc
 sudo sed -i '/force_color_prompt=yes/s/^/#/g' /root/.bashrc
 sudo su
fi

cat ~/.bashrc | grep force_color_prompt=yes

EOF
chmod +x color_terminals_over_ssh.sh
./color_terminals_over_ssh.sh enable
Другие вопросы по тегам