Identifica el servidor en el que estoy trabajando

9

¿Cómo identificar en qué servidor estás cuando usas ssh desde la terminal?

Tengo que ingresar a 30 servidores diariamente y cambiar de uno a otro constantemente.
Actualmente estoy editando el nombre de la pestaña y escribiendo la dirección IP para saltar de una a otra.

¿Existe una forma automática de hacerlo (asignando la dirección IP del servidor como el nombre de la pestaña)? ¿Alguna otra alternativa que no implique editar un archivo en cada servidor?

RASG
fuente
1
¿Qué necesita saber para identificar su servidor? Simplemente escribo "hostname" para ver el nombre del servidor. Eso es suficiente para mí saber porque solíamos usar una buena convención de nomenclatura
Privado
Actualmente tengo user@hostnameen el primer host que conecto. Me gustaría ver la dirección IP. Además, si salto de server1a server2, la pestaña no cambia los nombres.
RASG
sí, ese es tu nombre, pero me refiero al nombre del servidor. debe haber un nombre de host para esa máquina. ¿No es suficiente información para ti?
Privado
1
¿Qué tal configurar el color de fondo de sus terminales? Dependiendo de cómo se conecte y qué terminal esté utilizando, podría automatizarlo. Por ejemplo, puedo establecer un fondo rojo oscuro para los servidores de producción, así que sé que tengo que tener mucho cuidado, especialmente cuando me conecto simultáneamente a servidores intermedios que se ven y se sienten exactamente igual.
Panda Pyjama
1
Si está cambiando constantemente entre 30 servidores, entonces necesita buscar scripts y herramientas como puppet para la administración. Además, si una IP es más reconocible que el nombre de host, ¡estos no suenan como buenos nombres de host!
JamesRyan

Respuestas:

11

Usualmente uso el nombre de host, establecido a través de $PS1. Sin embargo, si se tomara la molestia, puede comenzar a usar GNU screeny luego podría definir una función como esta:

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

Explicación:

  1. Incluso si configura un título desde su shell local, la configuración remota del shell puede sobrescribirlo. screenno permite directamente que el shell remoto haga esto, y tiene que personalizarlo para permitirlo, lo que le facilita establecer un título localmente y apegarse a él.
  2. Busque la IP del nombre de host , mientras considera el último parámetro como el nombre de host, y configúrelo como el título. Tuve que hacer un poco de prueba y error antes de obtener una echocadena correcta . Es posible que tengas que hacerlo también.
  3. Finalmente, use screenpara iniciar una sesión con el sshcomando. La sesión finaliza cuando sale el comando.

Puede personalizar esto de varias maneras. Por ejemplo, puede guardar los nombres de host e IP en un archivo y leerlo (algo así como el ssh_config) (y tal vez guardar otras cosas para el título, como nombres de usuario).

Ahora usa ssh-title some.hostpara conectarte. Creo que esta es la única forma de hacerlo sin editar nada del lado del servidor.

muru
fuente
5

Algunas formas de identificar un servidor:

  • Huella digital SSH : segura, pero cambia cada vez que la vuelve a implementar.
  • Shell prompt ( PS1) y título del terminal : inseguro (cualquiera puede duplicarlo) pero simple y práctico.
  • ip address - seguro con una huella digital SSH y más fácil de leer.
  • hostname - inseguro pero muy legible.
l0b0
fuente
Gracias. y ¿cómo lo agregarías automáticamente como título de la pestaña de tu terminal?
RASG
2

Otra opción es usar liquidprompt --- funciona para ambos bashy zsh, y se puede configurar fácilmente para tener el título del terminal configurado e incluso para colorear en diferentes colores el nombre de host en el indicador:

ingrese la descripción de la imagen aquí

Rmano
fuente
2

Esta solución es un poco complicada, pero creo que hará lo que estás buscando. Necesitará xdotoole wmctrlinstaló para que esto funcione.

Primero tiene que editar su ~/.bashrcarchivo porque, por defecto, el terminal restablece su título después de cada línea, lo que hace que los títulos de la línea de comandos sean inútiles.

Justo después de: xterm*|rxvt*)

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

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

A continuación, crearemos un sshscript personalizado llamado lo que quieras, pero para esta respuesta llamaré al mío tab-ssh. Abra un editor de texto y guarde lo siguiente como 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

Luego hazlo ejecutable:

chmod +x tab-ssh

Ahora, suponiendo que esté utilizando bashy gnome-terminalejecutando el script, debe abrir una nueva pestaña, cambiarle el nombre e iniciar la sshsesión. Por ejemplo:

tab-ssh [email protected]

abrirá una nueva pestaña, cámbiele el nombre a 0.0.0.0(es decir, todo lo que sigue al signo "@") y luego ejecute [email protected].

Creado usando lo siguiente:

TheSchwa
fuente