Identifique o servidor no qual estou trabalhando

9

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

Eu tenho que usar 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)? Quaisquer outras alternativas que não envolvam a edição de um arquivo em cada servidor?

    
por RASG 22.09.2014 / 15:18

4 respostas

11

Eu geralmente uso o nome do host, definido via $PS1 . No entanto, se você se der ao trabalho, você pode começar a usar o GNU screen e então você pode definir uma função assim:

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 '3]0;'"$host"' - '"$IP"'
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 '3]0;'"$host"' - '"$IP"'%pre%7'
    screen ssh "$@"
}
7' screen ssh "$@" }

Explicação:

  1. Mesmo se você definir um título no seu shell local, ele pode ser substituído pelas configurações do shell remoto. screen não permite diretamente que o shell remoto faça isso, e você precisa personalizá-lo para permitir isso, facilitando a configuração de um título localmente e a manutenção dele.
  2. Pesquise IP do nome do host , considerando o último parâmetro como o nome do host, e configure-o como o título. Eu tive que fazer um pouco de teste e erro antes de obter a string echo correta. Você pode ter que fazer isso também.
  3. Finalmente, use screen para iniciar uma sessão com o comando ssh . 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 (como o ssh_config ) (e talvez salvar outras coisas para o título, como nomes de usuário).

Agora use ssh-title some.host para se conectar. Acho que esta é a única maneira de fazer isso sem editar nada do lado do servidor.

    
por muru 22.09.2014 / 17:46
5

Algumas maneiras de identificar um servidor:

  • Impressão digital SSH - segura, mas muda sempre que você reimplanta.
  • Solicitação de shell ( PS1 ) e título do terminal - inseguro (qualquer pessoa pode duplicar mas simples e prático.
  • ip address - segura com uma impressão digital SSH e mais facilmente legível.
  • hostname - inseguro, mas muito legível.
por l0b0 22.09.2014 / 15:37
2

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

    
por Rmano 22.09.2014 / 16:35
2

Esta solução é um pouco agressiva, mas acho que vai fazer o que você está procurando. Você precisará do xdotool e do wmctrl instalado para que isso funcione.

Primeiro você tem que editar o seu arquivo ~/.bashrc porque, por padrão, o terminal redefine seu título após cada linha, o título da linha de comando de renderização é inútil.

Logo após: xterm*|rxvt*)

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

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

Em seguida, vamos criar um script personalizado ssh chamado o que você quiser, mas para essa resposta eu chamarei o 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 "3]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 bash e gnome-terminal , a execução do script deve abrir uma nova guia, renomeá-la e iniciar a sessão ssh . Por exemplo:

tab-ssh [email protected]

irá abrir uma nova aba, renomeá-la para 0.0.0.0 (ou seja, tudo seguindo o sinal "@"), então execute [email protected] .

Criado usando o seguinte:

por TheSchwa 22.09.2014 / 18:50