Identifikasi server tempat saya bekerja

9

Bagaimana cara mengidentifikasi server yang Anda gunakan saat menggunakan ssh dari terminal?

Saya harus ssh ke 30 server setiap hari, dan beralih di antara mereka terus-menerus.
Saat ini saya sedang mengedit nama tab dan menulis alamat IP untuk beralih dari satu ke yang lain.

Apakah ada cara otomatis untuk melakukan ini (menetapkan alamat IP server sebagai nama tab)? Adakah alternatif lain yang tidak melibatkan pengeditan file di setiap server?

RASG
sumber
1
apa yang perlu Anda ketahui untuk mengidentifikasi server Anda? Saya cukup mengetik "hostname" untuk melihat nama server. Itu cukup bagi saya untuk tahu karena kami dulu menggunakan konvensi penamaan yang baik
Pribadi
Saat ini saya miliki user@hostnamedi host pertama saya terhubung. saya ingin melihat alamat ip. juga, jika saya beralih dari server1ke server2, tab tidak mengubah nama.
RASG
ya itu nama Anda, tapi maksud saya servername. harus ada nama host untuk mesin itu. bukankah itu info yang cukup untuk Anda?
Pribadi
1
Bagaimana dengan mengatur warna latar belakang terminal Anda? Bergantung pada bagaimana Anda terhubung dan terminal apa yang Anda gunakan, Anda dapat mengotomasinya. Sebagai contoh, saya dapat menetapkan latar belakang merah gelap untuk server produksi jadi saya tahu saya harus ekstra hati-hati, terutama ketika menghubungkan secara bersamaan ke server pementasan yang terlihat dan terasa persis sama.
Panda Pajama
1
Jika Anda beralih antara 30 server terus-menerus maka Anda perlu melihat skrip dan alat-alat seperti boneka untuk manajemen. Juga jika IP lebih mudah dikenali daripada nama host, ini tidak terdengar seperti nama host yang bagus!
JamesRyan

Jawaban:

11

Saya biasanya menggunakan nama host, diatur melalui $PS1. Namun, jika Anda mau mengambil masalah, Anda bisa mulai menggunakan GNU screendan kemudian Anda bisa mendefinisikan fungsi seperti:

function ssh-title () {
    host="${@: -1}"  # You could customize it to make it identify the hostname better
    IP=$(host "$host" | awk '/has address/ { print $4 }')
    echo -ne '\033]0;'"$host"' - '"$IP"'\007'
    screen ssh "$@"
}

Penjelasan:

  1. Bahkan jika Anda menetapkan judul dari shell lokal Anda, itu mungkin akan ditimpa oleh pengaturan shell jarak jauh. screentidak secara langsung membiarkan remote shell melakukan ini, dan Anda harus menyesuaikannya untuk memungkinkannya melakukannya, membuatnya lebih mudah bagi Anda untuk menetapkan judul secara lokal dan tetap menggunakannya.
  2. Cari IP dari nama host , sambil mempertimbangkan parameter terakhir sebagai nama host, dan tetapkan sebagai judul. Saya harus melakukan sedikit trial and error sebelum saya mendapatkan echostring yang tepat . Anda mungkin harus melakukannya juga.
  3. Akhirnya, gunakan screenuntuk memulai sesi dengan sshperintah. Sesi berakhir ketika perintah keluar.

Anda dapat menyesuaikan ini dengan berbagai cara. Sebagai contoh, Anda dapat menyimpan nama host dan IP dalam file dan membacanya (seperti itu ssh_config) (dan mungkin menyimpan hal-hal lain untuk judul, seperti nama pengguna).

Sekarang gunakan ssh-title some.hostuntuk terhubung. Saya pikir ini adalah satu-satunya cara Anda dapat melakukan ini tanpa mengedit sisi server apa pun.

muru
sumber
5

Beberapa cara untuk mengidentifikasi server:

  • Sidik jari SSH - aman tetapi berubah setiap kali Anda memindahkan kembali.
  • Shell prompt ( PS1) dan judul terminal - tidak aman (siapa pun dapat menduplikasinya) tetapi sederhana dan praktis.
  • ip address - Amankan dengan sidik jari SSH, dan lebih mudah dibaca.
  • hostname - tidak aman tetapi sangat mudah dibaca.
l0b0
sumber
Terima kasih. dan bagaimana Anda secara otomatis menambahkan itu sebagai judul tab terminal Anda?
RASG
2

Pilihan lain adalah dengan menggunakan liquidprompt --- berfungsi untuk keduanya bashdan zsh, dan dapat dengan mudah dikonfigurasikan untuk memiliki set judul terminal dan bahkan untuk warna dalam berbagai warna nama host di prompt:

masukkan deskripsi gambar di sini

Rmano
sumber
2

Solusi ini sedikit meretas, tetapi saya pikir ini akan melakukan apa yang Anda cari. Anda akan membutuhkan xdotooldan wmctrlmenginstal agar ini berfungsi.

Pertama Anda harus mengedit ~/.bashrcfile Anda karena secara default terminal akan me-reset judulnya setelah setiap baris, membuat judul baris perintah tidak berguna.

Tepat setelah: xterm*|rxvt*)

Menggantikan: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

Dengan: PS1="${debian_chroot:+($debian_chroot)}\u@\h \w\a$ "

Selanjutnya kita akan membuat sshskrip khusus yang disebut apa pun yang Anda inginkan, tetapi untuk jawaban ini saya akan memanggil skrip saya tab-ssh. Buka editor teks dan simpan yang berikut ini sebagai tab-ssh:

#!/usr/bin/env bash

WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

sleep 1
title=$(echo "$*" | sed s/.*@//g)
xdotool type --delay 1 --clearmodifiers 'echo -en "\033]0;"'"${title}"'"\a"'
xdotool key Return

sleep 1
xdotool type --delay 1 --clearmodifiers "ssh $*"
xdotool key Return

Kemudian buat itu bisa dieksekusi:

chmod +x tab-ssh

Sekarang, dengan asumsi Anda menggunakan bashdan gnome-terminal, menjalankan skrip harus membuka tab baru, mengganti nama, dan memulai sshsesi. Untuk exmaple:

tab-ssh [email protected]

akan membuka tab baru, ganti namanya menjadi 0.0.0.0(yaitu segala sesuatu yang mengikuti tanda "@"), kemudian jalankan [email protected].

Dibuat menggunakan yang berikut ini:

TheSchwa
sumber