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?


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.


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.

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


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 username@0.0.0.0

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

Utworzono przy użyciu:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.