Zidentyfikuj serwer, na którym pracuję

9

Jak zidentyfikować serwer, na którym jesteś, gdy używasz ssh z terminala?

Muszę ssh do 30 serwerów dziennie i ciągle się między nimi przełączać.
Obecnie edytuję nazwę karty i piszę adres IP, aby przeskakiwać z jednej na drugą.

Czy istnieje zautomatyzowany sposób (przypisanie adresu IP serwera jako nazwy karty)? Jakieś alternatywy, które nie będą wymagały edycji pliku na każdym serwerze?

RASG
źródło
1
co musisz wiedzieć, aby zidentyfikować swój serwer? Po prostu wpisuję „nazwa hosta”, aby zobaczyć nazwę serwera. To wystarczy, żebym wiedział, ponieważ stosowaliśmy dobrą konwencję nazewnictwa
Prywatny
obecnie mam user@hostnamena pierwszym hoście, który łączę. Chciałbym zobaczyć adres IP. Ponadto, jeśli przejdę server1do server2, karta nie zmienia nazw.
RASG
tak, to twoje imię, ale mam na myśli nazwę serwera. musi być nazwa hosta dla tego komputera. czy to dla ciebie za mało informacji?
Prywatny
1
Co powiesz na ustawienie koloru tła swoich terminali? W zależności od sposobu połączenia i używanego terminalu możesz go zautomatyzować. Na przykład, mogę ustawić ciemnoczerwone tło dla serwerów produkcyjnych, więc wiem, że muszę zachować szczególną ostrożność, szczególnie w przypadku jednoczesnego łączenia się z serwerami pomostowymi, które wyglądają i zachowują się dokładnie tak samo.
Panda Pajama
1
Jeśli ciągle przełączasz się między 30 serwerami, musisz przyjrzeć się skryptom i narzędziom takim jak marionetka do zarządzania. Również jeśli adres IP jest bardziej rozpoznawalny niż nazwa hosta, nie brzmi to jak dobre nazwy hosta!
JamesRyan

Odpowiedzi:

11

Zwykle używam nazwy hosta ustawionej za pomocą $PS1. Jeśli jednak zaryzykujesz, możesz zacząć używać GNU, screena następnie możesz zdefiniować taką funkcję:

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

Wyjaśnienie:

  1. Nawet jeśli ustawisz tytuł z lokalnej powłoki, może zostać nadpisany przez ustawienia zdalnej powłoki. screennie pozwala na to bezpośrednio zdalnej powłoce i musisz ją dostosować, aby to zrobić, ułatwiając lokalne ustawienie tytułu i trzymanie się go.
  2. Wyszukaj adres IP od nazwy hosta , biorąc pod uwagę ostatni parametr jako nazwę hosta i ustaw go jako tytuł. Musiałem zrobić trochę prób i błędów, zanim otrzymałem właściwy echociąg. Być może będziesz musiał to zrobić.
  3. Na koniec użyj, screenaby rozpocząć sesję z sshpoleceniem. Sesja kończy się po wyjściu polecenia.

Możesz to dostosować na różne sposoby. Na przykład możesz zapisać nazwy hostów i adresy IP w pliku i odczytać z niego (trochę jak ssh_config) (i może zapisać inne rzeczy dla tytułu, takie jak nazwy użytkownika).

Teraz użyj ssh-title some.hostdo połączenia. Myślę, że to jedyny sposób, aby to zrobić bez edytowania czegokolwiek po stronie serwera.

muru
źródło
5

Kilka sposobów identyfikacji serwera:

  • Odcisk palca SSH - bezpieczny, ale zmienia się przy każdym ponownym wdrożeniu.
  • Podpowiedź powłoki ( PS1) i tytuł terminala - niepewne (każdy może go zduplikować), ale proste i praktyczne.
  • ip address - zabezpieczony za pomocą odcisku palca SSH i łatwiejszy do odczytania.
  • hostname - niepewny, ale bardzo czytelny.
l0b0
źródło
dzięki. i jak automatycznie dodasz to jako tytuł karty terminalu?
RASG
2

Inną opcją jest użycie płynnego monitu --- działa w obu przypadkach bashi zshmoże być łatwo skonfigurowane tak, aby ustawić tytuł terminalu, a nawet pokolorować w różnych kolorach nazwę hosta w monicie:

wprowadź opis zdjęcia tutaj

Rmano
źródło
2

To rozwiązanie jest trochę hackerskie, ale myślę, że zrobi to, czego szukasz. Będziesz potrzebował xdotooli wmctrlzainstalowany, aby to działało.

Najpierw musisz edytować ~/.bashrcplik, ponieważ domyślnie terminal resetuje swój tytuł po każdej linii, czyniąc zestawy wierszy poleceń bezużytecznymi.

Zaraz po: xterm*|rxvt*)

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

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

Następnie stworzymy niestandardowy sshskrypt o nazwie cokolwiek zechcesz, ale dla tej odpowiedzi zadzwonię do mojego tab-ssh. Otwórz edytor tekstu i zapisz następujące dane jako 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

Następnie uczyń go wykonywalnym:

chmod +x tab-ssh

Teraz, zakładając, że używasz bashi gnome-terminaluruchomienie skryptu powinno otworzyć nową kartę, zmienić jej nazwę i rozpocząć sshsesję. Na przykład:

tab-ssh [email protected]

otworzy nową kartę, zmieni nazwę na 0.0.0.0(tj. wszystko po znaku „@”), a następnie uruchom [email protected].

Utworzono przy użyciu:

TheSchwa
źródło