Como posso gerenciar uma lista de hosts acessados com frequência?

3

Como posso selecionar e fazer login rapidamente nos vários hosts que preciso acessar via ssh? Eu estou construindo um script de shell como o abaixo que usa dialog para mostrar um menu de hosts da linha de comando, mas estou curioso para saber se existe uma maneira melhor.

#!/bin/dash
tempfile='tempfile 2>/dev/null' || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15

while [ 1 ]
do
    dialog --menu "Select Host" 0 0 0 \
    "hostname1" "Host description 1" \
    "hostname2" "Host description 2" \
    "hostname3" "Host description 3" 2> $tempfile

    HOSTNAME='cat $tempfile'

    if [ "x" = "x$HOSTNAME" ]; then
        break
    fi

    ssh $HOSTNAME
done
    
por Ben Williams 18.12.2009 / 19:37

13 respostas

9

Eu gosto de ter cada host configurado com um nome abreviado no arquivo ~ / .ssh / config em minha máquina cliente. Aqui está um exemplo:

Host host1
    HostName     longhostname.mydomain.com 
    User         remoteuser
    IdentityFile ~/ssh-keys/id_rsa-my-keypair

Desta forma eu posso apenas digitar "ssh host1" e imediatamente estar logado.

    
por 18.12.2009 / 21:46
2

Para uma solução baseada em GUI, procure em SSHmenu .

    
por 18.12.2009 / 19:42
2

Para os logins frequentes, geralmente dependo de nomes de host curtos. Nosso DNS da empresa contém a maioria deles, o resto está em / etc / hosts. Combinado com um agente ssh isso é conveniente o suficiente para mim. Ah sim, e memória muscular. Quando penso em um nome de host, ele aparece magicamente na tela se meus dedos estiverem próximos o suficiente do teclado.

Para os comandos menos frequentes, geralmente dependo do histórico de comandos (se não forem não freqüentes) ou do Wiki em que estão documentados (copiar / colar). Essa abordagem tem a vantagem de que as tarefas menos frequentes são mais ou menos garantidas de serem documentadas completamente.

Pensei em brincar com a automatização da conclusão de comandos, para que o ssh expandisse automaticamente nomes de host frequentes em "tab", mas até hoje eu não perdi muito isso ... Um dia eu vou ...

    
por 18.12.2009 / 19:46
2

Honestamente, eu posso digitar ssh user@host ou quando estou no windows winkey+r then putty <server> mais rápido do que qualquer sistema de menu. Isso e eu evito usar o mouse o máximo possível, porque os tiques do relógio se somam no final do dia.

    
por 18.12.2009 / 19:47
2

Eu tenho uma memória fotográfica, então lembre-se de seus endereços IP, infelizmente eu sei, mas de algum benefício eu tenho que dizer:)

    
por 20.12.2009 / 20:38
1

Eu prefiro pequenos scripts de shell ou aliases de shell. Na melhor tradição do UNIX, nomeio-os o mais curto possível para minimizar a digitação.

Por exemplo, eu tenho um alias "ns1", que é o comando SSH de 1 linha necessário para acessar o (obviamente) servidor de primeiro nome que eu mantenho.

Normalmente, o nome do comando é um mnemônico curto para o nome da máquina, e a versão não prefixada desse nome é padronizada para ssh. Então "ns1" irá me incluir, e (se for uma caixa do Windows) o alias "rns1" pode disparar um comando de cliente de desktop remoto para essa máquina.

Se eu tivesse tantos que não conseguiria rastreá-los, usaria o método shell script e manteria uma linha de descrição em um comentário em cada um, com uma tag comum para todos os scripts. Então eu escrevia um pequeno script que imprimia o nome de cada arquivo no meu diretório de script personalizado, seguido por qualquer coisa que eu tivesse encontrado naquela linha de comentário. A execução desse script, então, documentaria na tela cada comando e o que ele fazia.

    
por 18.12.2009 / 19:59
1

Acabei de saber há poucos dias que você pode usar ~/.ssh/config para tornar isso bastante indolor.

As entradas nesse arquivo são assim:

Host short
    User joni
    HostName short.foo.bar.domain.fi

( User pode ser omitido, caso em que seu nome de usuário atual é usado).

Em seguida, você pode usar o nome abreviado do host: ssh short . Ou com o bash-completion ativado, basta digitar algo como ssh sh , clicar em tab e pronto.

Esta e Pesquisa de histórico de comandos Ctrl-R faça SSH'ing para meus anfitriões favoritos bastante fácil.

    
por 18.12.2009 / 22:00
1

Se você quiser acelerar a conexão, usar a funcionalidade ControlPath / ControlMaster do cliente OpenSSH ajuda e aproveita a maioria das conexões que são usadas levemente, para que seja possível multiplexar vários logins em uma conexão TCP. ~/.ssh/config é analisado para que, para qualquer opção de configuração, seja usada a primeira correspondência encontrada, para que você possa fazer algo assim:

Host *-nomaster
        ControlMaster no
        ControlPath none

Host *
        ControlPath ~/.ssh/cp/%h-%p-%r

Host *-master
        ControlMaster yes

Host foobar foobar-master foobar-nomaster
        Hostname foobar.example.org

e você precisará mkdir ~/.ssh/cp também, é claro.

Eu só uso a conclusão de tabulação de zsh , que vem com a conclusão de tabulação para muitos comandos, incluindo o ssh. Para ssh, ele irá preferir hosts dos arquivos known_hosts (usuário e sistema), mas se o prefixo do host não corresponder a esses, usará regras de host ~ / .ssh / config.

    
por 21.12.2009 / 03:53
0
screen

Depois, deixo-os abertos.

    
por 18.12.2009 / 20:00
0

Qual é a sua ferramenta ou método favorito para fazer login rapidamente nos hosts que você precisa acessar via ssh?

Eu usei scripts, mas gosto muito de usar o iterm e o recurso de favoritos.

Claro, fazer a coisa clicky com o mouse e encontrar um servidor 'a' em uma lista leva mais tempo do que colocá-lo na linha de comando. Mas o iTerm tem atalhos de teclado.

E com os favoritos, posso agrupar grupos de servidores em pastas lógicas (produção / web ou produção / zonas / web). Eu tenho mais de cem servidores para cuidar: lembrar de todos os seus nomes não vai acontecer, muito menos tentar lembrar quais servidores pertencem ao meu farm JDE e quais são o meu cluster de aplicativo BOM.

Especialmente às 03:00, quando as coisas estão quebradas.

    
por 19.12.2009 / 03:56
0

Se você tiver bash como seu shell, poderá usar o seguinte snippet para usar seu arquivo known_hosts para bash_completion:

complete -W “$(echo 'cat ~/.ssh/known_hosts | cut -f 1 -d ‘ ‘ | sed -e s/,.*//g | uniq | grep -v “\[“';)” ssh

isso não funciona se você hash seus hosts conhecidos, então você teria que analisar algo como seu arquivo / etc / hosts.

porta osx para bash_completion já inclui suporte para conclusão da guia ssh

A conclusão da guia scp também é muito legal, mas requer o uso de ssh-agent ou ssh_config para referenciar um arquivo de identidade sem senha com uma chave pública correspondente no host remoto.

    
por 20.12.2009 / 20:34
0

O pacote de conclusão do bash para Linux e OS X usa o ssh known_hosts para concluir a tabulação das entradas do host. Isso, além de um arquivo host completo, é o meu método.

    
por 21.12.2009 / 04:46
0

Eu uso uma combinação de .ssh / config e screen:

Primeiro (como mencionado em várias respostas anteriores) eu configuro meu arquivo .ssh / config para que eu possa usar nomes curtos e pular a digitação do meu nome de usuário (que não é o mesmo nome de usuário da minha máquina local, então é bom tê-lo explicitamente em .ssh / config) e, de preferência, use chaves públicas para logins sem senha.

Eu tenho um alias (ou função) que lista todos os hosts no meu arquivo .ssh / config, então se eu esquecer os nomes deles (eu tenho acesso a várias dúzias, e os esquemas de nomenclatura são descontroladamente inconsistentes e eu não não use todos eles com a mesma frequência que os outros) Eu apenas posso digitar 'hosts' para ver todos os seus nomes listados.

Agora, para a tela. Uma vez que executar a tela na minha máquina local significa que perco todas as minhas sessões quando levo meu laptop para a noite, e um dos grandes benefícios da tela é ter sessões persistentes. Eu não corro a tela localmente. Em vez disso, faço login em um servidor remoto e executo a tela nesse servidor (vamos chamá-lo de "jumper", pois ele serve como um "ponto de partida") e, a partir dele, faço login nas outras máquinas com as quais estou trabalhando.

Eu NÃO coloco todos eles no meu arquivo .screenrc para login automático, porque eu não quero CADA servidor TODAS as vezes. Eu normalmente quero um subconjunto, então eu tenho uma sessão de tela com um subconjunto e outra sessão de tela com outro subconjunto de telas.

    
por 13.08.2010 / 22:35