Bagaimana saya bisa secara otomatis mengubah warna terminal ketika saya ssh server?

14

Saya sering masuk ke berbagai server dari jendela os x terminal saya.

Saya ingin menetapkan skema warna untuk host yang berbeda sehingga windows terminal saya lebih mudah untuk dibedakan. Bisakah ini dilakukan secara otomatis?


sumber

Jawaban:

11

Inilah solusi lengkapnya. Simpan daftar alamat ip dan / atau domain server Anda dan warna yang Anda inginkan di ~ / .server_colors:

192.168.122.102, Red Sands
192.168.122.103, Samudera
www.foo.com, Rumput
foo.com, Rumput

Kemudian tambahkan baris ini ke ~ / .profile untuk membajak perintah ssh:

alias ssh = "~ / bin / safe_ssh $ 1"

Kemudian bandingkan apa pun setelah @ di target ssh Anda ke daftar Anda. Jika ada kecocokan, jalankan AppleScript untuk mengubah layar ke warna yang sesuai. Inilah ~ / bin / safe_ssh:

#! / bin / bash
ip = `echo $ 1 | cut -d "@" -f2`
match = `cat ~ / .server_colors | grep $ ip | wc -l`
if [$ match -gt 0]
kemudian
    color = `cat ~ / .server_colors | grep $ ip | cut -f2 -d "," `
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
fi
/ usr / bin / ssh $ 1

Dan terakhir, inilah ~ / bin / change_terminal_color.scpt

di jalankan argv
    beri tahu aplikasi "Terminal" untuk mengatur pengaturan saat ini dari tab jendela 1 yang dipilih (pengaturan pertama yang namanya adalah (item 1 dari argv))
akhirnya jalankan

Saya mengambil sebagian besar kode ini dari posting blog ini .

muirbot
sumber
1
Sangat bagus. Dalam skrip safe_ssh, $ 1 harus menjadi $ @ untuk memungkinkan parameter tambahan untuk SSH dilewati. Mungkin juga panggilan setelah ssh untuk mengembalikan terminal kembali ke default. Satu edit terakhir akan membuat ini cukup sempurna: dukungan untuk perintah SSH yang tidak mengandung '@'.
nOw2
2

Solusi dari @muirbot bekerja sangat baik untuk saya. Saya membuat beberapa perbaikan kecil untuk itu. Saya akan menambahkannya di bawah posnya setelah saya memiliki reputasi yang cukup.

Ganti baris

ip =echo $1 | cut -d"@" -f2
dengan
ip =echo $@ | grep -Eio [[:alnum:]_.-]+@[[:alnum:]_.-]+ | cut -d@ -f2

Perubahan ini memungkinkan untuk memberikan argumen tambahan pada perintah ssh Anda seperti "ssh -p 1111 userName @ host"

Ekspresi reguler memungkinkan untuk alamat ipv4 dan nama domain sederhana.

Untuk lebih jauh mendukung beberapa argumen, ubah baris terakhir menjadi

/ usr / bin / ssh $ @

Vincent Nikkelen
sumber
0

Saya hanya mencari hal yang sama dan menemukan artikel ini:

http://akrabat.com/php/osx-terminal-colours/

Ia menggunakan skrip php untuk mengubah warna terminal dengan applescript. Anda dapat mengatur pemetaan warna yang berbeda untuk setiap server. Bekerja sangat baik untuk saya, meskipun merasakan dorongan untuk menulis ulang hal-hal php menjadi ruby ​​:)

fk

effkay
sumber
0

Saya menggunakan skrip yang meluncurkan SSH di windows xterm dengan berbagai warna bg / fg. Ini memilih warna berdasarkan hash nama host dari rentang warna sehingga tidak diperlukan konfigurasi.

Script ditulis dalam Ruby: https://github.com/mickeyil/ssx

miluz
sumber
0

Jika Anda menggunakan iTerm2, buat file bernama ~/bin/ssh-host-color.shdengan konten dari https://gist.github.com/jbochi/31f118b8ae2882a2c90fa46c46509b57 :

set_term_bgcolor(){
  local R=$1
  local G=$2
  local B=$3
  /usr/bin/osascript <<EOF
tell application "iTerm"
  tell the current window
    tell the current session
      set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
    end tell
  end tell
end tell
EOF
}

if [[ "$@" =~ "production.example.com" ]]; then
  set_term_bgcolor 40 0 0
elif [[ "$@" =~ "qa.example.com" ]]; then
  set_term_bgcolor 0 40 0
fi

trap "set_term_bgcolor 0 0 0" EXIT

ssh $@

Dan tambahkan baris berikut ke ~/.aliases.shfile Anda :

alias ssh="~/bin/ssh-host-color.sh $@"
jbochi
sumber