SSH dependendo do nome do host

0

Eu tenho dois conjuntos de servidores, um que começa com ab22 e um que começa com cd22. Para hosts ab22 (ab22 *), temos que primeiro ssh para um host A1 e depois para o host específico. Para hosts cd22 (cd22 *), temos que primeiro ssh para hospedar B1 e depois para o host específico.

Eu quero ssh esses hosts diretamente do meu diretório home.Ele deve ssh o host que eu forneço.

Então, se eu fornecer o ab22xyz, ele vai para lá e se eu fornecer ab22lmn, ele deve ir para lá.

Pelo que consegui encontrar, sinto que usará o arquivo ~ / .ssh / config, mas não consigo fazer essas configurações.

Não consigo adicionar os hosts individuais no arquivo de configuração, pois o número é enorme.

Alguém por favor pode me ajudar? Preciso saber se é possível e, se sim, como é possível.

Por favor, forneça a entrada a ser feita no arquivo host.

(Eu tenho minhas chaves de configuração para o login para A1 e B1, mas não para servidores indiv)

Por favor ajude. Obrigado

    
por saurav 24.02.2012 / 00:21

3 respostas

1

Host não leva apenas nomes, mas padrões. Simplesmente use ab22* e cd22* como suas entradas Host e configure de acordo.

    
por 24.02.2012 / 00:30
0

Existem algumas coisas que você deve estabelecer antes de configurar tudo. A primeira é que não existe uma maneira fácil de "hop" entre as máquinas sem truques para usar sua chave local e autenticar na outra ponta (por exemplo, o encaminhamento de porta de ssh, o sinalizador -L). A segunda, que você não pode realmente instruir o SSH a ir para uma máquina e depois conectar a outra.

Um nome comum para máquinas de gateway para efetuar login na infraestrutura é jumpboxes. Sugiro que você gere chaves privadas no host A1 e B1 e, em seguida, distribua suas chaves públicas apropriadamente entre ab22 * e cd22 *. Essa é uma prática melhor e, se uma pessoa da sua equipe decidir sair, você terá apenas dois lugares para remover as chaves, em vez de centenas de servidores em potencial.

O que eu sugiro é escrever um script minúsculo que encapsule o binário ssh no servidor para a classe apropriada de hosts (ab22 * e cd22 * de acordo) e, em seguida, conecte na máquina final que você está tentando acessar.

    
por 24.02.2012 / 00:32
0

Você poderia usar uma função de shell que procura o padrão ab22 * e cd22 * nos argumentos ssh e faz a coisa certa. Supondo que você use sh, bash ou ksh:

myssh () {
   case "$@" in
      ab22*) relay=A1 ;;
      cd22*) relay=B1 ;;
      *) relay="" ;;
   esac
   if test -z "$relay"
   then
      ssh $@
   else
      ssh -t $relay ssh $@
   fi
}

Esta função, se colocada em seu .profile, fornecerá um comando myssh que faz um ssh para A1 ou B1, conforme necessário, antes de fazer o ssh para o destino final.

    
por 24.02.2012 / 00:58

Tags