Identifique o servidor em que estou trabalhando

9

Como identificar em qual servidor você está usando o ssh do terminal?

Eu tenho que ssh em 30 servidores diariamente, e alternar entre eles constantemente.
Atualmente, estou editando o nome da guia e escrevendo o endereço IP para pular de um para outro.

Existe uma maneira automatizada de fazer isso (atribuir o endereço IP do servidor como o nome da guia)? Alguma outra alternativa que não envolva a edição de um arquivo em cada servidor?

RASG
fonte
11
o que você precisa saber para identificar seu servidor? Eu simplesmente digito "hostname" para ver o nome dos servidores. Isso é o suficiente para eu saber, porque costumávamos usar uma boa convenção de nomenclatura
Particular
atualmente eu tenho user@hostnameno primeiro host que eu conecto. eu gostaria de ver o endereço IP. Além disso, se eu pular de server1para server2, a guia não mudará de nome.
RASG 22/09
sim esse é o seu nome, mas eu quero dizer servername. deve haver um nome de host para essa máquina. não é informação suficiente para você?
Private
11
Que tal definir a cor de fundo dos seus terminais? Dependendo de como você se conecta e de qual terminal está usando, você pode automatizá-lo. Por exemplo, posso definir um plano de fundo vermelho escuro para servidores de produção, para que eu tenha que ter cuidado extra, especialmente ao conectar simultaneamente a servidores de armazenamento temporário que parecem exatamente iguais.
Panda Pajama
11
Se você estiver alternando constantemente entre 30 servidores, precisará examinar scripts e ferramentas como fantoche para gerenciamento. Além disso, se um IP for mais reconhecível que o nome do host, eles não parecerão bons nomes de host!
JamesRyan

Respostas:

11

Eu normalmente uso o nome do host, definido via $PS1. No entanto, se você resolver o problema, poderá começar a usar o GNU screene definir uma função como:

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

Explicação:

  1. Mesmo se você definir um título a partir do seu shell local, ele poderá ser sobrescrito pelas configurações remotas do shell. screennão permite que o shell remoto faça isso diretamente, e você deve personalizá-lo para permitir, facilitando a definição de um título localmente e cumprindo-o.
  2. Procure o IP do nome do host , considerando o último parâmetro como o nome do host e defina-o como o título. Eu tive que fazer um pouco de tentativa e erro antes de conseguir a echocorda certa . Você pode ter que fazer isso também.
  3. Por fim, use screenpara iniciar uma sessão com o sshcomando A sessão termina quando o comando sai.

Você pode personalizar isso de várias maneiras. Por exemplo, você pode salvar os nomes de host e IPs em um arquivo e ler a partir dele (mais ou menos como o ssh_config) (e talvez salvar outras coisas para o título, como nomes de usuário).

Agora use ssh-title some.hostpara conectar. Eu acho que essa é a única maneira de fazer isso sem editar nada do lado do servidor.

muru
fonte
5

Algumas maneiras de identificar um servidor:

  • Impressão digital SSH - segura, mas muda sempre que você reimplementar.
  • Prompt do Shell ( PS1) e título do terminal - inseguro (qualquer um pode duplicar), mas simples e prático.
  • ip address - seguro com uma impressão digital SSH e mais facilmente legível.
  • hostname - inseguro, mas muito legível.
l0b0
fonte
obrigado. e como você adicionaria isso automaticamente como o título da guia do terminal?
RASG 22/09
2

Outra opção é usar liquidprompt --- funciona para ambos bashe zsh, e pode ser facilmente configurado para definir o título do terminal e até colorir em cores diferentes o nome do host no prompt:

insira a descrição da imagem aqui

Rmano
fonte
2

Essa solução é um pouco imprudente, mas acho que ela fará o que você está procurando. Você precisará xdotoole está wmctrlinstalado para que isso funcione.

Primeiro você precisa editar seu ~/.bashrcarquivo porque, por padrão, o terminal redefine seu título após cada linha, tornando inútil o título da linha de comando.

Logo depois: xterm*|rxvt*)

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

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

Em seguida, criaremos um sshscript personalizado chamado o que você quiser, mas, para esta resposta, chamarei de meu tab-ssh. Abra um editor de texto e salve o seguinte 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

Em seguida, torne-o executável:

chmod +x tab-ssh

Agora, supondo que você esteja usando bashe gnome-terminalexecutando o script, abra uma nova guia, renomeie-a e inicie a sshsessão. Por exemplo:

tab-ssh [email protected]

abrirá uma nova guia, renomeie-a para 0.0.0.0(ou seja, tudo após o sinal "@") e execute [email protected].

Criado usando o seguinte:

TheSchwa
fonte