Làm cách nào để tự động thay đổi nền thiết bị đầu cuối, dựa trên tên máy chủ ssh?


9

Làm thế nào một người có thể thay đổi màu nền của cửa sổ đầu cuối, dựa trên tên máy chủ bạn ssh vào?

tức là khi tôi chuyển sang các hệ thống nhúng trực tiếp trên phần cứng sản xuất, tôi muốn nền thiết bị đầu cuối chuyển sang màu đỏ - để "duy trì nhận thức" về máy chủ mà tôi đang sử dụng. Chỉ có tên máy chủ trong PS1 không phải lúc nào cũng đủ.

Đang sử dụng gnome-terminal, nhưng sẽ chấp nhận mọi giải pháp khả thi trong Linux.

Câu trả lời:


7

Bạn có thể sử dụng ssh LocalCommand để phát ra chuỗi thoát ANSI để thay đổi màu nền và có một phần trên mỗi máy chủ (hoặc mẫu máy chủ) để chọn màu thích hợp bạn muốn tương ứng với máy chủ từ xa.

Nếu các máy chủ sản xuất của bạn tuân theo quy ước đặt tên như "bắt đầu bằng prod", bạn có thể thử đoạn mã sau trong tệp ~ / .ssh / config của mình: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Nếu không có quy ước đặt tên tiện dụng để sử dụng các mẫu ký tự đại diện, bạn chỉ có thể liệt kê tên máy chủ được phân tách bằng dấu cách. Bạn cũng có thể tạo các khối Máy chủ bổ sung với các giá trị màu và chuỗi khác nhau cho các máy chủ không sản xuất khác.

Sau khi kết nối với máy chủ phù hợp với mẫu, printf tương ứng sẽ được thực thi cục bộ, thay đổi màu nền thành màu đỏ ([41m chọn màu đỏ làm màu nền, phần [2J sẽ tô lại toàn bộ màn hình bằng màu nền đã cập nhật. Xem https://en.wikipedia.org/wiki/ANSI_escape_code để có nhiều tùy chọn hơn)

Điều phiền toái lớn nhất về cách tiếp cận này là màu nền vẫn tồn tại khi thoát khỏi phiên ssh; Không có bản sao nào cho LocalCommand được chạy khi ngắt kết nối (mà tôi biết). Một tập lệnh bao bọc bí danh hoặc trình bao cho ssh có thể gọi printf "\x1b[0m"như một thiết lập lại. Mặt khác, có màu nền được đặt qua LocalCommand có nghĩa là bạn sẽ có được bộ màu ngay cả khi ssh không được chạy qua tập lệnh bao bọc hoặc bí danh.


Câu trả lời tuyệt vời! Vấn đề duy nhất tôi đang thấy, tuy nhiên một vấn đề quan trọng, là sự thay đổi màu sắc chỉ dành cho "màn hình" đầu tiên. Ngay sau khi các lệnh được nhập và màn hình cuộn lên trên, nó sẽ chuyển từ màu đỏ trở lại màu đen. Có lẽ điều khiển màu gnome-terminal đang ghi đè chuỗi thoát ANSI? Bạn có biết một cách giải quyết?
Mtl Dev

Có thể làm điều gì đó tương tự, với biến nhắc PS1 trên máy chủ SSH không?
Mtl Dev

Việc thiết lập lại có thể được gây ra bởi các chuỗi trong biến nhắc PS1 của bạn hoặc nếu bạn có các lệnh như lsbí danh ls --color=autovà nó bao gồm chuỗi đặt lại '<ESC> [0m'. Để duy trì điều đó, có lẽ bạn sẽ cần phải thiết lập các cấu hình gnome-terminal khác nhau và đi theo tuyến tập lệnh bao bọc, chọn tên hồ sơ dựa trên tên máy chủ và gọignome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Bạn hoàn toàn đúng: Nếu tôi có ls --colourHOẶC trình tự đặt lại trong PS1, một mình sẽ ghi đè cài đặt màu ansi trước đó. Vì vậy, tôi sẽ xem xét việc thực hiện giải pháp kịch bản trình bao bọc được đề xuất của bạn, đó cũng là một ý tưởng tuyệt vời! Merci beaucoup!
Mtl Dev

Chỉ để người khác biết: thêm printf vào ~ / .ssh / config xuất hiện để phá vỡ rsync. Chi tiết liên quan tại đây: serverfault.com/questions/267154/
Ấn
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.