Gerenciando várias chaves ssh

2

Eu tenho um monte de chaves ssh, todas elas são protegidas e gerenciadas por ssh-agent. Como resultado disso, estou recebendo "Muitas falhas de autenticação" em algumas conexões.

Como foi explicado neste site antes, isso acontece porque o ssh tentará todas as chaves que o agente lançar nele.

A solução proposta é usar IdentitiesOnly na configuração, junto com um IdentityFile. Embora isso realmente pare de oferecer chaves erradas, parece que desativa completamente o agente, então agora tenho que digitar a senha em cada conexão.

Não consegui encontrar informações claras sobre isso. O IdentitiesOnly apenas desabilita a obtenção de chaves do ssh-agent integralmente? Ou deveria apenas bloquear as chaves que não são mencionadas?

Obrigado Mathijs

# here's my config
~% cat .ssh/config
Host bluemote
  HostName some.host.com
  IdentitiesOnly yes
  IdentityFile /home/mathijs/.ssh/keys/bluebook_ecdsa

# I had the key loaded into the agent, shown here
~% ssh-add -L
ecdsa-sha2-nistp521 SOME_LONG_BASE64_NUMBER== /home/mathijs/.ssh/keys/bluebook_ecdsa

# but it doesn't seem to get used
~% ssh bluemote
Enter passphrase for key '/home/mathijs/.ssh/keys/bluebook_ecdsa':
    
por Mathijs Kwik 07.12.2012 / 11:49

2 respostas

1

Does IdentitiesOnly just disable getting keys from ssh-agent in full? Or should it just block out the keys that aren't mentioned?

e

it seems it completely disables the agent in full

Esse é o comportamento pretendido, conforme descrito na manpage ssh_config(5) :

 IdentitiesOnly
         Specifies that ssh(1) should only use the authentication identity
         files configured in the ssh_config files, even if ssh-agent(1)
         offers more identities.  The argument to this keyword must be
         “yes” or “no”.  This option is intended for situations where ssh-
         agent offers many different identities.  The default is “no”.

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authen‐
         tication identity is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and
         ~/.ssh/id_rsa for protocol version 2.  Additionally, any identi‐
         ties represented by the authentication agent will be used for
         authentication.  ssh(1) will try to load certificate information
         from the filename obtained by appending -cert.pub to the path of
         a specified IdentityFile.

Existe uma tarefa: ssh-add . Embora um agente de chave SSH regular pareça estar desativado usando IdentitiesOnly , os que eu adiciono usando ssh-add são usados de qualquer maneira.

    
por 07.12.2012 / 12:12
0

Eu tenho muitas chaves também e acabei de descobrir uma maneira de fazer isso esta noite:

#!/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
}

Conecte-se usando:

ssh_connect "server" "user"

Isso pressupõe que sua chave privada seja $ HOME / .ssh / {username}, mas pode ser adaptada, é claro.

Exporta a chave pública do agente e usa isso. Se ainda não foi adicionado ao agente, ele usa a chave privada.

Note que ele irá deletar sua configuração ssh, então ela deve ser modificada para reescrever sua configuração ao invés de removê-la se você tiver alguma coisa lá que você precise manter.

    
por 11.07.2013 / 06:02

Tags