Identifizieren Sie den Server, auf dem ich arbeite

9

Wie kann ich feststellen, auf welchem ​​Server Sie sich befinden, wenn Sie ssh vom Terminal aus verwenden?

Ich muss täglich auf 30 Server ssh und ständig zwischen ihnen wechseln.
Derzeit bearbeite ich den Tab-Namen und schreibe die IP-Adresse, um von einem zum anderen zu springen.

Gibt es eine automatisierte Möglichkeit, dies zu tun (Zuweisen der Server-IP-Adresse als Registerkartenname)? Gibt es andere Alternativen, bei denen keine Datei auf jedem Server bearbeitet werden muss?

RASG
quelle
1
Was müssen Sie wissen, um Ihren Server zu identifizieren? Ich gebe einfach "Hostname" ein, um den Servernamen zu sehen. Das reicht mir zu wissen, weil wir früher eine gute Namenskonvention verwendet haben
Privat
Derzeit habe ich user@hostnameauf dem ersten Host, den ich verbinde. Ich möchte die IP-Adresse sehen. Auch wenn ich von server1zu springe server2, ändert die Registerkarte keine Namen.
RASG
Ja, das ist dein Name, aber ich meine Servername. Es muss einen Hostnamen für diesen Computer geben. Ist das nicht genug Info für dich?
Privat
1
Wie wäre es mit der Einstellung der Hintergrundfarbe Ihrer Terminals? Je nachdem, wie Sie eine Verbindung herstellen und welches Terminal Sie verwenden, können Sie es möglicherweise automatisieren. Zum Beispiel kann ich einen dunkelroten Hintergrund für Produktionsserver festlegen, damit ich weiß, dass ich besonders vorsichtig sein muss, insbesondere wenn ich gleichzeitig eine Verbindung zu Staging-Servern herstelle, die genau gleich aussehen und sich genauso anfühlen.
Panda Pyjama
1
Wenn Sie ständig zwischen 30 Servern wechseln, müssen Sie sich Skripte und Tools wie Puppet for Management ansehen. Auch wenn eine IP besser erkennbar ist als der Hostname, klingen diese nicht nach guten Hostnamen!
James Ryan

Antworten:

11

Normalerweise verwende ich den Hostnamen, der über eingestellt ist $PS1. Wenn Sie sich jedoch die Mühe machen, können Sie GNU verwenden screenund dann eine Funktion wie die folgende definieren:

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

Erläuterung:

  1. Selbst wenn Sie einen Titel in Ihrer lokalen Shell festlegen, wird dieser möglicherweise durch die Einstellungen der Remote-Shell überschrieben. screenDie Remote-Shell lässt dies nicht direkt zu, und Sie müssen sie anpassen, um dies zu ermöglichen. Dies erleichtert es Ihnen, einen Titel lokal festzulegen und sich daran zu halten.
  2. Suchen Sie die IP-Adresse des Hostnamens , während Sie den letzten Parameter als Hostnamen betrachten, und legen Sie ihn als Titel fest. Ich hatte ein bisschen zu tun Versuch und Irrtum , bevor ich ein Recht bekam echoString. Möglicherweise müssen Sie es auch tun.
  3. Verwenden Sie screenabschließend eine Sitzung mit dem sshBefehl. Die Sitzung endet, wenn der Befehl beendet wird.

Sie können dies auf verschiedene Arten anpassen. Sie können beispielsweise die Hostnamen und IP-Adressen in einer Datei speichern und daraus lesen (ähnlich wie die ssh_config) (und möglicherweise andere Dinge für den Titel speichern, z. B. Benutzernamen).

Verwenden Sie jetzt ssh-title some.hostzum Verbinden. Ich denke, dies ist die einzige Möglichkeit, dies zu tun, ohne irgendetwas auf der Serverseite zu bearbeiten.

muru
quelle
5

Einige Möglichkeiten, einen Server zu identifizieren:

  • SSH-Fingerabdruck - sicher, ändert sich jedoch bei jeder erneuten Bereitstellung.
  • Shell-Eingabeaufforderung ( PS1) und Terminaltitel - unsicher (jeder kann sie duplizieren), aber einfach und praktisch.
  • ip address - Sicher mit einem SSH-Fingerabdruck und leichter lesbar.
  • hostname - unsicher aber sehr gut lesbar.
l0b0
quelle
Vielen Dank. und wie würden Sie das automatisch als Titel Ihrer Terminalregisterkarte hinzufügen?
RASG
2

Eine andere Option ist die Verwendung von liquidprompt --- funktioniert für beide bashund zshund kann einfach so konfiguriert werden, dass der Terminaltitel festgelegt wird und der Hostname in der Eingabeaufforderung sogar in verschiedenen Farben eingefärbt wird:

Geben Sie hier die Bildbeschreibung ein

Rmano
quelle
2

Diese Lösung ist ein wenig hackisch, aber ich denke, sie wird das tun, wonach Sie suchen. Sie benötigen xdotoolund wmctrlinstalliert, damit dies funktioniert.

Zuerst müssen Sie Ihre ~/.bashrcDatei bearbeiten , da das Terminal standardmäßig nach jeder Zeile seinen Titel zurücksetzt, wodurch Befehlszeilentitelsätze unbrauchbar werden.

Gleich nach: xterm*|rxvt*)

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

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

Als nächstes erstellen wir ein benutzerdefiniertes sshSkript mit dem Namen "Was auch immer Sie wollen", aber für diese Antwort rufe ich meins auf tab-ssh. Öffnen Sie einen Texteditor und speichern Sie Folgendes als 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

Dann machen Sie es ausführbar:

chmod +x tab-ssh

Angenommen, Sie verwenden bashund gnome-terminal, sollte das Skript eine neue Registerkarte öffnen, umbenennen und die sshSitzung starten . Zum Beispiel:

tab-ssh [email protected]

öffnet eine neue Registerkarte, benennt sie um 0.0.0.0(dh alles, was auf das "@" - Zeichen folgt) und führt sie dann aus [email protected].

Erstellt mit den folgenden:

TheSchwa
quelle