Aumentando a produtividade quando SSH em vários hosts [duplicado]

2

Eu trabalho em operações e preciso ser capaz de logar em vários servidores entre algumas centenas de servidores de maneira produtiva. O que quero dizer com produtividade é o seguinte: desde o momento em que alguém me pede para ver uma série de hosts até o momento em que eu realmente entro nos hosts, ele deve ser mínimo. Agora eu tenho que ir olhar minhas anotações, encontrar os nomes de host, adicionar meu nome de usuário na frente, colocar a série de hosts em um editor de texto e colar esse comando no terminal, o que fica muito tedioso.

O ideal é que eu possa fazer alguma função que eu possa chamar do termial que me ajudará a filtrar minha lista de hosts e encontrar os que eu preciso, adicionar meu nome de usuário e criar meu ssh (ou csshx ). Eu pensei em ter o seguinte arquivo de texto:

description           hostname          user
.........             .........         ...

e usando cat para encontrar os hosts de que preciso e concatenar o user@ para a frente e criar o comando. Eu sinto que existe uma saída melhor e gostaria de ver a opinião das pessoas sobre isso.

Obrigado pelo seu tempo!

    
por Nagia 22.04.2015 / 19:26

2 respostas

2

Você pode, embora se torne difícil, adicionar entradas ao seu ~ / .ssh / config para cada nome descritivo que quiser, então você pode apenas ssh <name> e você pode ter o usuário / host correto, etc. automaticamente aplicado. Aqui está um exemplo da minha configuração

host abc
   hostname 1.2.3.4
   User root
   LocalForward 5951:192.168.1.1:5901

   ProxyCommand ssh 1.2.3.4 nc 192.168.1.1 22

Então eu posso apenas digitar ssh abc e ele irá me logar como root em 1.2.3.4 e configurar algum redirecionamento de porta e encapsular meu ssh em outro host ainda em

    
por 22.04.2015 / 19:30
0

Eu uso aliases para poder digitar um pequeno comando para ir para diferentes servidores. Então, ao invés de ter que digitar um longo comando, eu apenas digite o alias. Agora, à medida que você começa a adicionar mais servidores, fica mais difícil lembrar que o server1 tem um alias de 'one' e server97 tem um alias 'fred', então a primeira ideia de alias só funciona para os servidores que eu acesso com mais frequência. p>

Para outros, eu crio uma função (que também é alias) para que, quando eu a chamar, seja apresentada uma lista de servidores para conexão. Com base no número digitado, ele executa o alias para se conectar a esse servidor.

Eu mantenho meus aliases em um arquivo .bash_aliases (naturalmente, isso depende do SO onde / como você define) e minhas funções em um arquivo .bash_functions que eu carrego de .bashrc . Isso permite uma fácil manutenção, em vez de ter um enorme arquivo bashrc .

Assim, por exemplo, você pode ter as seguintes entradas no seu alias arquivo:

alias serv1='ssh [email protected]'<br>
alias serv2='ssh [email protected]'<br>
alias start='serverconnect'

E depois tem uma função como esta:

function serverconnect
{
    echo "Select server you would like to connect to:"
    echo " 1 - Server1"
    echo " 2 - Server2"

    read choice

    case $choice in
    1)
      serv1
    ;;
    2)
      serv2
    ;;

    *)
      echo "Invalid choice"
    esac
}

Então, se eu precisar conectar-me ao server1, eu apenas digitaria 'serv1', enquanto se eu quisesse uma lista de servidores para conectar, eu digitaria 'start'. Isso pode se tornar um desafio à medida que a lista de servidores aumenta, se você quiser exibi-los todos em uma única lista (o que provavelmente sairia da tela) ou dividi-los ainda mais. Tudo depende do que funciona para o seu fluxo de processo.

Atualização: achei que você também pode precisar da maneira como eu chamo os aliases e arquivo de função. Em .bashrc , uso a seguinte sintaxe:

if [ -f "${HOME}/.bash_aliases" ]; then
  source "${HOME}/.bash_aliases"
fi
    
por 22.04.2015 / 19:58