quinta-feira, 22 de dezembro de 2011

Script para Automatizar Conexões SSH

Se você é um solicitado administrador de redes, um responsável por uma lan house ou um laboratório Linux ou mesmo um usuário avançado, certamente já se viu na situação de ter de abrir várias sessões de SSH para máquinas diferentes com grande freqüência. Normalmente, isto não é problema algum, mas muitas vezes é chato e cansativo se digitar tantos parâmetros para abrir a conexão.
Se este é o seu problema, o script abaixo poderá lhe ajudar muito!!



  • Mas, o que ele faz??
Ele automatiza o comando do SSH retirando alguns dos indicadores de parâmetros, como o "-p".


  • Como Devo Usá-lo??
Primeiramente, grave o script com um nome sugestivo, como "fastssh.sh", colocando-o em um diretório dentro de seu PATH (por exemplo, o /usr/bin), para que possa ser executado de qualquer diretório.
Não se esqueça de determinar a permissão de execução para todos os usuários, com o comando:

chmod +x fastssh.sh


Agora, imagine que você tem dois servidores que precisam ser acessados rotineiramente, com as seguintes configurações:

nomes: "server1.dominio.com" e "server2.dominio.com".
porta do SSH: 1000.
usuário: "pele".

OBS1: é sempre recomendável, para garantir maior segurança, que o SSH utilize uma porta fora do padrão!!
OBS2: Cuidado!! Normalmente, não é recomendável se conectar em servidor diretamente como "root".

Você deverá criar então 2 arquivos bem simples:

server1.sh:
fastssh.sh server1.dominio.com 1000 pele

server2.sh:
fastssh.sh server2.dominio.com 1000 pele

Faça os dois arquivos se tornarem executáveis (utilizando o mesmo comando "chmod", conforme mostrado acima) e coloque-os igualmente em uma pasta como o /usr/bin (ou qualquer outra que esteja no seu PATH).
Pronto!! Parabéns, agora, para se conectar a qualquer um dos servidores, basta somente se chamar o script correspondente, digitando-se "server1.sh" ou "server2.sh".


  • Conclusões
Este artigo foi bem simples e mostrou uma técnica de automatização extremamente útil e a que, muitas vezes, na pressa do dia-a-dia nós não atentamos e não utilizamos. Muitas vezes, são nas tarefas mais banais onde se perde mais tempo... Assim, fica aqui a dica e o script, testado e pronto para entrar em funcionamento na sua rede!!

6 comentários:

Vinícius disse...

Uma crítica construtiva. Legal a solução que você encontrou mas existe alternativa 'natural' do SSH pra isso. O arquivo $HOME/.ssh/config faz tudo isso. Da uma olhada em 'man ssh_config' que você tirar bom proveito. Abraço!

Anônimo disse...

Porque alguem perde tempo para fazer um post deste.

Dosbre disse...

Ao invés de checar por variáveis para usar valores padrão podes utilizar "Parameter Expansion", e.g.:

USER=${1:-$USER}
PORT=${2:-"22"}

SEE ALSO
bash(1)

O Pajé disse...

Pessoal,

O uso do .ssh/config é uma ótima alternativa para você usar em sua máquina pessoal ou em seu servidor, mas tem algumas desvantagens. Imaginem o seguinte cenário: você tem um grande laboratório de máquinas Linux, com número muito flutuante de usuários. É um local onde os usuários são criados e apagados a todo instante e muitas máquinas são atualizadas, reconfiguradas ou reinstaladas de acordo com demandas específicas. Um local onde, dependendo do contexto, a sua rede recebe mais máquinas novas para ficarem ali temporariamente ou pode perder máquinas para outra rede, também temporariamente.

Num cenário com estas características, qual a maneira mais fácil e certeira de se prover sempre a todos os usuários um meio de se conectar às outras máquinas da rede?? Editando toda hora o .ssh/config?? Não: a melhor maneira é simplesmente copiar os scripts prontos para um local seguro e acessível a todos, como o /usr/bin ou outro local que o administrador deseje. Com isso, sua rede sempre fornecerá, de forma ágil e com pouca propensão a falhas ou erros, acesso rápido a todas as máquinas. Editar o arquivo config pode incorrer em erros ou se tornar uma tarefa mais lenta. Simplesmente sobrescrever este arquivo pode apagar alguma configuração específica que o usuário criou ou pode lhe fazer remover máquinas num momento e ter de readicioná-las depois, gerando retrabalho, caso seu ambiente tenha número de máquinas flutuante, de acordo com a demanda.

Bom, este cenário é muito surreal?? Claro que não!! Posso citar vários casos: laboratórios de escolas, laboratórios de projetos de pesquisa de uma instituição, redes de ONGs que precisem servir a número flutuante de voluntários, funcionários e assistidos, alguns pavilhões de eventos, laboratórios de treinamentos e cursos, etc.

PS1 - Quanto ao comentário anônimo acima: por que alguém perde tempo fazendo um comentário como este??

PS2 - amigo DoSBre: sim, creio que é uma alternativa e gostaria que os visitantes do blog se sentissem motivados a modificar, adaptar ou mesmo aprimorar o script da forma como desejem. Claro, deixem seus comentários com as adaptações e melhorias se possível. Ajudará decerto a todos!!

Anônimo disse...

Se era para criar um script que chama um outro, nao era mais facil que o script ja chamasse o ssh com a sintaxe correta? Estas utilizando 3 scripts para realizar uma unica tarefa.... acredito que seria muito mais facil criar aliases dentro do teu profile e ter um script que aualizasse-o em todas as maquinas... just my 2 cents. =)

O Pajé disse...

Na verdade, eu não faria assim, embora funcione de fato. Note que este caso é flexível o suficiente para que seja facilmente adaptável a qualquer usuário, mesmo os criados posteriormente. Além disso, ele acumula o histórico e é mais fácil de ser manutenido por scripts de backup, já que não implica em modificações parciais de arquivos.
Mas, sobretudo, este roteiro descrito pelo artigo tem uma coisa de que gosto muito: ele implementa padrões de projeto. Com isso ele evita redundâncias e permite um código bem simples e elegante.