problemas com várias chaves privadas

1

Eu tenho vários usuários no meu servidor e, como tal, um par separado de chaves pública / privada para cada um.

O problema é que, uma vez que eles são adicionados como identidades (Mac OS X 10.8.4, se isso faz diferença), quando eu me conecto com uma conta de usuário, ela passa por todas as chaves tentando encontrar a correta. Isso não funciona tão bem por causa do MaxAuthTries.

Eu estaria bem em aumentar meus MaxAuthTries para 100 ou mais, mas, embora ele aceite que em um host correspondente, ele não substitua o original, e eu realmente não quero dar a público em geral 100 tentativas de autenticação para meu servidor ssh; configuração:

MaxAuthTries 2

Match host 1.2.3.4
        MaxAuthTries 100

MaxAuthTries não faz nada para o meu ip; ainda limita a 2.

Esta solução não seria ideal, mas seria aceitável se pudesse ser feita. Ao usar uma tecla bem abaixo na lista, leva algum tempo para verificar todas e encontrar a correta (especialmente se minha conexão com a Internet estiver atrasada) ... Além disso, enviar todas as minhas chaves, criptografadas ou não, me deixa desconfortável.

Idealmente, preciso conectar-me ao arquivo de chaves correto e não me incomodar em tentar os outros. O problema é que eu tenho a maioria das minhas senhas salvas no meu chaveiro, então, se eu limpar minhas identidades, perderei todas as senhas salvas.

Se isso não for possível, preciso alterar meus MaxAuthTries para um grande número para o meu IP. Pensei em fazer isso com o IPTables, mas uso o Plesk e gosto de usar a interface para gerenciar meu firewall.

Muito obrigado !!

    
por Chelsea Urquhart 08.07.2013 / 11:55

1 resposta

0

Eu estava prestes a começar uma recompensa por isso e percebi que a resposta era tão simples ...

Os dados do agente SSH não são criptografados para que possam ser recuperados por meio de um shell script, e eu uso o bash para selecionar o nome de usuário, servidor, etc, com base em um determinado domínio (que seria um vhost no servidor). / p>

Eu resolvi isso exportando a chave pública do meu agente ssh para um arquivo, forçando o uso somente dessa chave e, em seguida, excluindo a chave pública.

Aqui está o meu script (espero que seja útil para os outros!):

#!/bin/bash
remove_public () { # remove the public key after 2 seconds
  sleep 2
  rm -f $HOME/.ssh/public_key $HOME/.ssh/config
}

get_public () { # get the public key from ssh-add
  ssh-add -L | grep "$1" > $HOME/.ssh/public_key
  if [ ! -s "$HOME/.ssh/public_key" ] #identity hasn't yet been loaded
  then
    export KEY="$1" #use the private key it'll be added to the agent for next time assuming agent is configured.
  else
    export KEY="$HOME/.ssh/public_key" #use the public key
    ( remove_public & ) >/dev/null 2>&1
  fi
  chmod 700 "$KEY"
  echo "IdentitiesOnly=yes" > "$HOME/.ssh/config"
  echo "IdentityFile $KEY" >> "$HOME/.ssh/config"
}

ssh_connect () {
  chmod -R 700 $HOME/.ssh
  if [[ -z "$1" || -z "$2" ]]
  then
    echo "Username or server not specified!"
    exit 1;
  else
    get_public "$HOME/.ssh/$2"
    ssh "$2@$1" -i "$HOME/.ssh/$2"
  fi
}

AVISO se você realmente tiver um arquivo ssh_config, isso O excluirá. Mas é importante remover IdentitiesOnly e IdentityFile; caso contrário, o ssh será quebrado para conexões que não usem esse script.

Uso:

ssh_connect "server" "username"

Esta é uma versão simplificada do script de shell que escrevi porque minhas chaves nem sempre estão no mesmo diretório (na verdade, elas nunca são, elas são classificadas pelo servidor), eu sempre passo um comando de tela para o servidor , etc.

Observe também que, no comando rm, se você estiver preocupado com a segurança da chave pública excluída, poderá usar rm -fP em vez de rm -f se estiver usando o Mac OSX para substituir o arquivo três vezes antes da exclusão. Eu não sei quais outros SOs, se é que algum, suportam isso.

    
por 11.07.2013 / 05:45

Tags