2

У меня много ключей ssh, все они защищены парольной фразой и управляются ssh-agent. В результате я получаю "Слишком много ошибок аутентификации" на некоторых соединениях.

Как было объяснено ранее на этом сайте, это связано с тем, что ssh будет пытаться использовать все ключи, которые агент выбрасывает на него.

Предложенное решение заключается в использовании IdentitiesOnly в конфигурации вместе с IdentityFile. Хотя это действительно перестает предлагать неправильные ключи, похоже, что оно полностью отключает агента полностью, поэтому теперь мне нужно вводить фразу-пароль для каждого соединения.

Я не мог найти четкую информацию об этом. IdentitiesOnly просто отключить получение ключей от ssh-agent полностью? Или это должно просто заблокировать ключи, которые не упомянуты?

Спасибо, Матис

# 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':

2 ответа2

1

IdentitiesOnly просто отключить получение ключей от ssh-agent полностью? Или это должно просто заблокировать ключи, которые не упомянуты?

&

кажется, он полностью отключает агента в полном объеме

Это предполагаемое поведение, как описано в man- 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.

Есть одно решение: ssh-add . Хотя обычный агент ключа SSH, кажется, отключен с помощью IdentitiesOnly , те, которые я добавляю с помощью ssh-add , все равно используются.

0

У меня тоже много ключей, и я только что нашел способ сделать это этим вечером:

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

Подключение с помощью:

ssh_connect "server" "user"

Предполагается, что ваш закрытый ключ - $ HOME/.ssh/{username}, но, конечно, его можно адаптировать.

Он экспортирует открытый ключ от агента и использует его. Если он еще не был добавлен к агенту, он использует вместо этого закрытый ключ.

Обратите внимание, что он удалит вашу конфигурацию ssh, поэтому его следует изменить, чтобы переписать вашу конфигурацию, а не удалять ее, если у вас есть что-то, что вам нужно сохранить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .