Làm thế nào để có được thiết bị đầu cuối màu trên ssh?


53

Khi tôi kết nối qua ssh với máy chủ từ xa, mọi thứ chỉ là một phông chữ / màu. Tôi muốn có các màu như tôi làm cục bộ, ví dụ như màu xanh lá cây để thực thi và màu xanh lam cho các liên kết tượng trưng, ​​v.v. Và khi tôi chạy $ git diff trên máy chủ ssh, nó hiển thị cho tôi khác với màu sắc =)


Đó có phải là máy chủ Ubuntu mà bạn đang kết nối không?
Stefano Palazzo

@ stefano-palazzo: tới Debian.
Dima

Câu trả lời:


35

Bởi vì nó là xterm trên máy chủ, tôi nhận ra có gì đó không ổn với .bashrc

Và thực sự! ls --color=autochỉ hoạt động khi bạn được kết nối với TTY. Thay đổi tất cả mọi thứ chỉ đơn giản là --color.bashrctrên máy chủ từ xa và mọi thứ đều có màu sắc khá bây giờ.


42
Nó sẽ giúp câu trả lời này rất nhiều nếu bạn nói nơi bạn đặt --color = auto. .bashrc trên máy chủ? Lệnh gì?
rfay

8
Vì đây là một câu hỏi cũ vẫn còn có liên quan, tôi chỉ muốn thêm nó vào các hệ thống Ubuntu, mặc định .bashrc có một câu lệnh tình huống xác định thuật ngữ nào được phép màu. Nếu bạn tìm thấy dòng "case" $ TERM $ "in" trong .bashrc của bạn, hãy thêm "xterm) color_prompt = yes ;;" cũng sẽ kích hoạt màu sắc. Ngoài ra, bạn có thể bỏ dòng "force_color_prompt = yes" để kích hoạt toàn cầu luôn.
Mike E

2
đó là nhận xét của Mike E đã sửa nó cho tôi,
Frank Schrijver

3
Tôi bối rối. "Thay đổi mọi thứ thành đơn giản - màu sắc" nghĩa là gì? Tôi có thể xem một ví dụ không?
still_dreaming_1

1
Các bạn đang nói về máy chủ địa phương, máy chủ từ xa hoặc cả hai?
Adam

19

Điều này làm việc cho tôi:

ssh -t my_host my_command

-tlà chìa khóa Giải thích .


Điều này hoạt động hoàn hảo, và rất thuận tiện cho một nhiệm vụ tắt. Cảm ơn!
XtraSimplility

Tôi bị mất màu khi tôi thực hiện su -lệnh trong lời nhắc kết nối ssh
dubis

10

Có vẻ như màu sắc đã được đặt ~/.bashrccho tôi và vấn đề là ssh không sử dụng tệp bashrc. Bạn có thể sử dụng bashrc trong phiên ssh của mình bằng cách thêm vào như sau ~/.bash_profile:

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

1
Điều này làm việc cho tôi, và là một cách đơn giản và hiệu quả để hoàn thành nó!
với

7

Nội dung của biến env XTERM của bạn trên máy chủ khi bạn kết nối với nó là gì?

~ > export | grep -i term
TERM=xterm

$ xuất khẩu | grep -i hạn khai báo -x TERM = "xterm"
Dima

4

Trong trường hợp của tôi, phần còn thiếu là có màu ls, grep, v.v. có thể được thêm bằng cách thêm bí danh vào tệp .bashrc:

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

Vân vân.


2

Tôi đã thử thay đổi ~./bashrccài đặt (cả trên máy chủ cục bộ và máy chủ từ xa), nhưng dường như nó không hoạt động.

Sau đó, tôi nhận thấy rằng ~/.bashrcmáy chủ từ xa thậm chí không được thực thi nếu tôi kết nối với nó qua ssh. Vì vậy, tôi đã tạo ra ~/.bashrcmáy chủ từ xa để thực thi bởi puttinng if [ -f ~/.bashrc ]; then . ~/.bashrc fitrong máy chủ từ xa ~/.bash_profile. (dựa trên https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Vì vậy, giải pháp này không yêu cầu thay đổi ~/bashrctrực tiếp bất kỳ tệp nào nhưng nó yêu cầu thay đổi ~/bash_profiletệp của máy chủ từ xa để ~/bashrctệp của máy chủ từ xa được thực thi.


Ubuntu sử dụng .profilechứ không phải .bash_profiletheo mặc định và mặc định là .profilenguồn .bashrc.
muru

Đúng rồi. Nhưng có .profileđược thực hiện theo mặc định khi đăng nhập thông qua ssh?
chris544

Đúng. Miễn là bạn không ghi đè nó bằng cách sử dụng .bash_profile, bash chạy .profilekhi bắt đầu như một vỏ đăng nhập. Và SSH bắt đầu bash như một vỏ đăng nhập.
muru

Đó là chính xác mà ~/.profilekhông được đọc nếu ~/.bash_profiletồn tại. Nhưng ~/.bash_profilemặc định không tồn tại trên Ubuntu?
chris544

Xem bình luận đầu tiên của tôi một lần nữa. Không, nó không. Ubuntu sử dụng .profile.
muru

2

Vì các màu hoạt động tốt trong khi được đăng nhập trực tiếp, tôi chỉ không bỏ sót dòng force_color_prompt=yestrong tệp ~/.bashrc, điều đó cũng cho tôi màu trên 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)


Nâng cao, đây dường như là giải pháp đơn giản nhất.
snwflk

1

Trong tình huống của tôi, gần đây tôi đã cài đặt chef-localvà nó yêu cầu tôi thêm một dòng vào .bash_profile. Khi tôi đăng nhập, .bashrckhông bao giờ tải nữa, vì nó đã thấy .bash_profile.

Những gì tôi đã làm là thêm một dòng trong .bash_profile:

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

Tôi đăng xuất và quay lại và nhận thiết bị đầu cuối màu của tôi ngay lập tức.


0

Có một nhận xét từ "Mike E" ở trên có chứa câu trả lời cho tôi, nhưng nó không chỉ khó đọc, rất khó để hiểu ý anh ấy là gì nếu bạn không sử dụng .bashrcnhiều - và tôi không ' t.

Sau khi xoay quanh một chút, tôi đã nhận được kết quả mong muốn bằng cách thay đổi các dòng sau trong ~/.bashrcmáy tôi đã đăng nhập bằng ssh:

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

đến:

# 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

Tôi nghĩ rằng tôi có thể vừa thêm "| xterm" vào sau "color" trong dòng đầu tiên, hoặc tìm hiểu tại sao ssh lại sử dụng "xterm" thay vì "xterm-color" và thay đổi nó, nhưng điều này hoạt động và tôi có những thứ khác để làm bây giờ


0

Tôi đã mất màu khi kết nối qua proxy vì TERM=dumbvậy tôi đã sửa nó:

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

1
Bạn cũng nên phân bổ một thiết bị đầu cuối trên kết nối đầu tiên, nếu bạn sẽ làm điều đó.
muru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.