Identifiez le serveur sur lequel je travaille

9

Comment identifier le serveur sur lequel vous utilisez lorsque vous utilisez ssh à partir du terminal?

Je dois ssh dans 30 serveurs quotidiennement et basculer entre eux constamment.
Actuellement, je modifie le nom de l'onglet et j'écris l'adresse IP pour passer de l'un à l'autre.

Existe-t-il un moyen automatisé de procéder (en attribuant l'adresse IP du serveur comme nom d'onglet)? Y a-t-il d'autres alternatives qui n'impliqueront pas la modification d'un fichier sur chaque serveur?

RASG
la source
1
que devez-vous savoir pour identifier votre serveur? Je tape simplement "hostname" pour voir le nom du serveur. C'est assez pour moi de savoir parce que nous avions l'habitude d'utiliser une bonne convention de dénomination
Private
actuellement j'ai user@hostnamesur le premier hôte que je connecte. je voudrais voir l'adresse ip. aussi, si je passe de server1à server2, l'onglet ne change pas de nom.
RASG
oui c'est votre nom, mais je veux dire servername. il doit y avoir un nom d'hôte pour cette machine. N'est-ce pas assez d'informations pour vous?
Privé le
1
Que diriez-vous de définir la couleur d'arrière-plan de vos terminaux? Selon la façon dont vous vous connectez et le terminal que vous utilisez, vous pouvez être en mesure de l'automatiser. Par exemple, je peux définir un arrière-plan rouge foncé pour les serveurs de production, je sais donc que je dois être très prudent, en particulier lors de la connexion simultanée à des serveurs intermédiaires qui ont exactement la même apparence.
Panda Pyjama
1
Si vous basculez constamment entre 30 serveurs, vous devez examiner les scripts et les outils comme la marionnette pour la gestion. De plus, si une adresse IP est plus reconnaissable que le nom d'hôte, ceux-ci ne sonnent pas comme de bons noms d'hôte!
JamesRyan

Réponses:

11

J'utilise généralement le nom d'hôte, défini via $PS1. Cependant, si vous prenez la peine, vous pouvez commencer à utiliser GNU screenet ensuite vous pouvez définir une fonction comme ceci:

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

Explication:

  1. Même si vous définissez un titre à partir de votre shell local, il peut être remplacé par les paramètres du shell distant. screenne laisse pas directement le shell distant faire cela, et vous devez le personnaliser pour le faire, ce qui vous permet de définir plus facilement un titre localement et de vous y tenir.
  2. Recherchez l' IP à partir du nom d'hôte , tout en considérant le dernier paramètre comme le nom d'hôte, et définissez-le comme titre. Je devais faire un peu d' essai et erreurs avant d'obtenir une bonne echochaîne. Vous devrez peut-être le faire aussi.
  3. Enfin, utilisez screenpour démarrer une session avec la sshcommande. La session se termine lorsque la commande se termine.

Vous pouvez personnaliser cela de différentes manières. Par exemple, vous pouvez enregistrer les noms d'hôte et les adresses IP dans un fichier et les lire (un peu comme le ssh_config) (et peut-être enregistrer d'autres choses pour le titre, comme les noms d'utilisateur).

Maintenant, utilisez ssh-title some.hostpour vous connecter. Je pense que c'est la seule façon de le faire sans modifier quoi que ce soit côté serveur.

muru
la source
5

Quelques façons d'identifier un serveur:

  • Empreinte SSH - sécurisée mais change à chaque fois que vous redéployez.
  • Invite du shell ( PS1) et titre du terminal - non sécurisé (n'importe qui peut le dupliquer) mais simple et pratique.
  • ip address - sécurisé avec une empreinte SSH, et plus facilement lisible.
  • hostname - incertain mais très lisible.
l0b0
la source
Merci. et comment l'ajouteriez-vous automatiquement comme titre d'onglet de terminal?
RASG
2

Une autre option consiste à utiliser liquidprompt --- fonctionne pour les deux bashet zsh, et peut être facilement configuré pour que le titre du terminal soit défini et même pour colorer de différentes couleurs le nom d'hôte dans l'invite:

entrez la description de l'image ici

Rmano
la source
2

Cette solution est un peu hackish, mais je pense qu'elle fera ce que vous cherchez. Vous aurez besoin xdotoolet wmctrlinstallé pour que cela fonctionne.

Vous devez d'abord éditer votre ~/.bashrcfichier car par défaut le terminal réinitialise son titre après chaque ligne, rendant le titre de la ligne de commande inutile.

Juste après: xterm*|rxvt*)

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

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

Ensuite, nous allons créer un sshscript personnalisé appelé ce que vous voulez, mais pour cette réponse, j'appellerai le mien tab-ssh. Ouvrez un éditeur de texte et enregistrez les éléments suivants sous 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

Rendez-le ensuite exécutable:

chmod +x tab-ssh

Maintenant, en supposant que vous utilisez bashet gnome-terminal, l'exécution du script devrait ouvrir un nouvel onglet, le renommer et démarrer la sshsession. Par exemple:

tab-ssh [email protected]

ouvrira un nouvel onglet, le renommera (c'est-à 0.0.0.0-dire tout ce qui suit le signe "@"), puis exécutera [email protected].

Créé en utilisant ce qui suit:

TheSchwa
la source