Identifica il server sul quale sto lavorando


9

Come identificare su quale server ti trovi quando usi ssh dal terminale?

Devo accedere a 30 server ogni giorno e passare da uno all'altro in modo costante.
Attualmente sto modificando il nome della scheda e scrivendo l'indirizzo IP per passare da uno all'altro.

Esiste un modo automatizzato per farlo (assegnando l'indirizzo IP del server come nome della scheda)? Altre alternative che non comportano la modifica di un file su ciascun server?


1
cosa devi sapere per identificare il tuo server? Digito semplicemente "hostname" per vedere il nome del server. Questo è abbastanza per me da sapere perché usavamo una buona convenzione di denominazione
Privato

attualmente ho user@hostnamesul primo host che mi connetto. vorrei vedere l'indirizzo IP. inoltre, se salto da server1a server2, la scheda non cambia i nomi.
RASG,

si questo è il tuo nome, ma intendo servername. deve esserci un nome host per quella macchina. non sono abbastanza informazioni per te?
Privato

1
Che ne dici di impostare il colore di sfondo dei tuoi terminali? A seconda di come ti connetti e di quale terminale stai usando potresti essere in grado di automatizzarlo. Ad esempio, potrei impostare uno sfondo rosso scuro per i server di produzione, quindi so che devo stare molto attento, specialmente quando mi connetto simultaneamente a server di gestione temporanea che sembrano esattamente uguali.
Panda Pajama,

1
Se passi costantemente da 30 server a un altro, devi guardare gli script e strumenti come il pupazzo per la gestione. Inoltre, se un IP è più riconoscibile del nome host, questi non sembrano buoni nomi host!
JamesRyan,

Risposte:


11

Di solito uso il nome host, impostato tramite $PS1. Tuttavia, se dovessi affrontare il problema, puoi iniziare a utilizzare GNU screene quindi puoi definire una funzione in questo modo:

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 "$@"
}

Spiegazione:

  1. Anche se si imposta un titolo dalla shell locale, potrebbe essere sovrascritto dalle impostazioni della shell remota. screennon consente direttamente alla shell remota di farlo, e devi personalizzarlo per consentirlo, rendendo più semplice l'impostazione di un titolo localmente e il rispetto.
  2. Cerca l' IP dal nome host , considerando l' ultimo parametro come nome host e impostalo come titolo. Ho dovuto fare un po 'di tentativi ed errori prima di ottenere una echostringa corretta . Potrebbe essere necessario farlo anche tu.
  3. Infine, utilizzare screenper avviare una sessione con il sshcomando. La sessione termina quando termina il comando.

Puoi personalizzarlo in vari modi. Ad esempio, è possibile salvare i nomi host e gli IP in un file e leggere da esso (un po 'come il ssh_config) (e forse salvare altre cose per il titolo, come i nomi utente).

Ora usa ssh-title some.hostper connetterti. Penso che questo sia l'unico modo per farlo senza modificare nulla sul lato server.


5

Alcuni modi per identificare un server:

  • Impronta digitale SSH : sicura ma cambia ogni volta che la ridistribuisci.
  • Shell prompt ( PS1) e titolo del terminale - insicuro (chiunque può duplicarlo) ma semplice e pratico.
  • ip address - sicuro con un'impronta digitale SSH e più facilmente leggibile.
  • hostname - insicuro ma molto leggibile.

Grazie. e come lo aggiungerei automaticamente come titolo della scheda del terminale?
RASG,

2

Un'altra opzione è usare liquidprompt --- funziona per entrambi bashe zsh, e può essere facilmente configurato per avere il titolo del terminale impostato e persino per colorare in diversi colori il nome host nel prompt:

inserisci qui la descrizione dell'immagine


2

Questa soluzione è un po 'hacker, ma penso che farà ciò che stai cercando. Sarà necessario xdotoole wmctrlinstallato per farlo funzionare.

Per prima cosa devi modificare il tuo ~/.bashrcfile perché di default il terminale reimposta il suo titolo dopo ogni riga, rendendo inutile il titolo della riga di comando.

Subito dopo: xterm*|rxvt*)

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

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

Successivamente creeremo uno sshscript personalizzato chiamato come vuoi, ma per questa risposta chiamerò il mio tab-ssh. Apri un editor di testo e salva quanto segue come 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

Quindi renderlo eseguibile:

chmod +x tab-ssh

Ora, supponendo che tu stia utilizzando bashe gnome-terminal, l'esecuzione dello script dovrebbe aprire una nuova scheda, rinominarla e avviare la sshsessione. Per esempio:

tab-ssh username@0.0.0.0

aprirà una nuova scheda, rinominandola in 0.0.0.0(cioè tutto ciò che segue il segno "@"), quindi eseguirà username@0.0.0.0.

Creato utilizzando il seguente:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.