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

Я хочу запустить ssh-agent (с опцией maximum lifetime), но не добавлять ключи при запуске, а добавлять их по требованию.

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

ssh server1
Enter passphrase for key '/home/vi/.ssh/id_dsa':
server1> ...

ssh server2
server2> # no passphrase this time

# wait for lifetime

ssh server2
Enter passphrase for key '/home/vi/.ssh/id_dsa':

Я не хочу вручную помнить о запуске "ssh-add" каждый раз. (например, введенный пароль только для ssh и "о, он не помнил, нужно перепечатывать.)"

Как настроить ssh на автоматическое добавление ключа в ssh-агент, если пользователь указал парольную фразу?

12
задан Vi.
07.01.2023 13:04 Количество просмотров материала 3354
Распечатать страницу

4 ответа

СШ поддерживает добавление ключа к агенту при первом использовании (начиная с версии 7.2). Вы можете включить эту функцию, поместив следующее в ~/.ssh/config

AddKeysToAgent yes

Это также работает при использовании производных инструментов, таких как Git.

из 7.2 изменений:

* ssh(1): Add an AddKeysToAgent client option which can be set to
   'yes', 'no', 'ask', or 'confirm', and defaults to 'no'.  When
   enabled, a private key that is used during authentication will be
   added to ssh-agent if it is running (with confirmation enabled if
   set to 'confirm').
42
отвечен spheenik 2023-01-08 20:52

вы можете обмануть и поставить что-то вроде alias ssh='ssh-add -l || ssh-add && ssh' на .bashrc/.profile. Это первый запуск ssh-add -l, который может возвращать 0 (есть ключи на агенте), 1 (нет ключей) или 2 (агент не запущен); если он возвращает 0, ssh побежит; если 1,ssh-add побежит и тогда ssh; если 2, ssh-add рухнет и ssh не будет работать. Замените && С ; если вы хотите ssh для запуска, даже если агент не запущен.

18
отвечен Kovensky 2023-01-08 23:09

до тех пор, пока Auto-call-ssh-add не поддерживается ssh, я добавил Это в свой .bashrc, по предложению Ковенском:

ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'

псевдоним создается только в том случае, если идентификатор не добавлен, а сам псевдоним уничтожается при запуске.

таким образом, обычная команда ssh используется после добавления идентификатора.

5
отвечен Marc MAURICE 2023-01-09 01:26

Я использую следующую функцию оболочки:

ssh() {
    local possible_keys=($(/usr/bin/env ssh -G $@ | grep '^identityfile' \
                           | cut -d " " -f 2- | sed -e "s|^~|$HOME|"))
    for k in $possible_keys; do
        if [[ -f $k ]]; then
            local fingerprint=$(ssh-keygen -lf $k)
            ssh-add -l | grep -q "$fingerprint" || ssh-add $k
        fi
    done
    /usr/bin/env ssh $@
    return $?
}

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

0
отвечен mbrgm 2023-01-09 03:43

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх