Сохранить ключевую фразу SSH с помощью цепочки для ключей с параметром --noask

10

Я хочу использовать связку ключей для управления запросом ключевой фразы для ключей SSH, но он должен: 1) запрашивать его только тогда, когда я фактически использую ключ, и 2) сохранять его в течение некоторого периода времени после этого. На данный момент у меня есть 2 варианта:

  1. $ eval `keychain --eval --agents ssh id_rsa` - при запуске всегда будет запрашиваться пароль, но затем он будет сохранен.
  2. $ eval `keychain --eval --noask --agents ssh id_rsa` - это не будет запрашивать ничего при запуске, но будет продолжать запрашивать пароль каждый раз, когда я буду использовать этот ключ.

Есть ли способ совместить преимущества этих методов?

anlar
источник

Ответы:

9

В ssh-agentи последние версии OpenSSH сделать это просто:

  1. Начните в обычном режиме ssh-agentс тайм-аутом по умолчанию для добавленных ключей (например, 60 минут):

    eval `ssh-agent -t 60m`
    
  2. Настройте свой, sshчтобы добавить фактически используемые ключи к агенту. Добавьте новую строку в ~ / .ssh / config`:

    AddKeysToAgent yes
    

    Эта функция в последней версии OpenSSH 7.2. В предыдущих версиях вам нужно было добавить ключ к агенту вручную, если превышено ваше время ожидания, но это может быть довольно просто автоматизировано с помощью функции bash, что-то вроде этого:

    ssh() {
      /bin/ssh -o BatchMode=yes $* || \
        ssh-add path/to/the-key && /bin/ssh $*
    }
    

    Идея: попробуйте подключиться с помощью ключа в пакетном режиме (не будет запрашивать фразу-пароль и произойдет сбой, если ключа нет), а при ошибке добавьте ключ к агенту и повторите команду ssh.

Jakuje
источник