Не удается добавить ключи с плагином ssh-agent в zsh

Вопрос или проблема

Я только что установил Arch и пытаюсь настроить свою оболочку zsh.

В настоящее время я использую zinit в качестве менеджера плагинов с powerlevel10k.
Я хотел автоматизировать активацию ssh-agent и добавление ключей в него.

Это мой текущий файл .zshrc:

neofetch

# Включите мгновенный запрос Powerlevel10k. Должен находиться ближе к верхней части ~/.config/zsh/.zshrc.
# Инициализационный код, который может требовать ввода с консоли (подсказки пароля, [y/n]
# подтверждения и т. д.), должен находиться выше этого блока; все остальное может находиться ниже.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# Установите каталог для хранения zinit и плагинов
# --- Определен в файле .zshenv

# Загрузите Zinit, если его еще нет
if [ ! -d "$ZINIT_HOME" ]; then
    mkdir -p "$(dirname $ZINIT_HOME)"
    git clone https://github.com/zdharma-continuum/zinit "$ZINIT_HOME"
fi

# Загрузите zinit
source "${ZINIT_HOME}/zinit.zsh"

# Добавьте Powerlevel10k
zinit ice depth=1; zinit light romkatv/powerlevel10k

# Добавьте плагины zsh
zinit light zsh-users/zsh-syntax-highlighting
zinit light zsh-users/zsh-completions
zinit light zsh-users/zsh-autosuggestions
zinit light Aloxaf/fzf-tab

# Добавьте фрагменты
zinit snippet OMZP::git
zinit snippet OMZP::sudo
zinit snippet OMZP::archlinux
zinit snippet OMZP::command-not-found
zinit snippet OMZP::ssh-agent

# Загрузите завершения
autoload -U compinit && compinit

# Повторите все кэшированные завершения (рекомендуется документацией)
zinit cdreplay -q

# Чтобы настроить подсказку, выполните `p10k configure` или отредактируйте ~/.config/zsh/.p10k.zsh.
[[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh

# Привязка клавиш - стиль emacs, включает ^f ^b ^a ^e ...
bindkey -e
bindkey '^p' history-search-backward
bindkey '^n' history-search-forward

# История
# -- некоторые изменения уже в файле .zshenv
setopt appendhistory # добавлять в файл истории вместо перезаписи
setopt sharehistory  # делиться историей команд между сессиями
setopt hist_ignore_space # игнорировать команды, начинающиеся с пробела 
setopt hist_ignore_dups
setopt hist_ignore_all_dups
setopt hist_save_no_dups
setopt hist_find_no_dups # Не показывать дубликаты в поиске истории

# Стиль завершения
zstyle ':completion:*' matcher-list 'm:{a-zj}={A-Za-z}'
# Установите цвета по умолчанию для LS_COLORS
eval $(dircolors -b)
zstyle ':completion:*' list-colors $LS_COLORS
zstyle ':completion:*' menu no
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath' 
zstyle ':fzf-tab:complete:__zoxide_z:*' fzf-preview 'ls --color $realpath' 
  # конфигурации ssh-agent
zstyle :omz:plugins:ssh-agent quiet yes
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent agent-forwarding yes
zstyle :omz:plugins:ssh-agent identities ~/.ssh/github_rsa

# Псевдонимы
alias ls="ls --color"
alias c="clear"
alias b='cd ..'

# Интеграции оболочки
eval "$(fzf --zsh)" # Неявный поиск
eval "$(zoxide init --cmd cd zsh)"

Как видите, для ssh-ключей я использую:

zinit snippet OMZP::ssh-agent

и следующие настройки:

zstyle :omz:plugins:ssh-agent quiet yes
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent agent-forwarding yes
zstyle :omz:plugins:ssh-agent identities ~/.ssh/github_rsa

~/.ssh/github_rsa – это место расположения действующего ключа и он не имеет связанного с ним пароля.

Проблема, с которой я сталкиваюсь, заключается в том, что никаких ключей не добавляется в агент.

Я не нашел никаких упоминаний об этом в интернете.

Как упоминалось в плагине ssh-agent, в разделе “Настройки” / “идентификации” (выделение не моё):

Чтобы загрузить несколько идентификаций, используйте стиль identities (это не имеет эффекта, если включена настройка lazy).

Так что в этом и заключается ваша проблема.

Однако, как упоминается на той же странице в разделе “Настройки” / “Специфические настройки для Powerline 10k”:

Powerline10k имеет настройку мгновенного запроса, которая не любит, когда этот плагин записывает в консоль. Рассмотрите возможность использования следующих настроек, если вы используете p10k (документировано выше):

zstyle :omz:plugins:ssh-agent quiet yes
zstyle :omz:plugins:ssh-agent lazy yes

Так что вы можете попробовать следующее:

  • Игнорировать предупреждение в разделе “Специфические настройки для Powerline 10k” и удалить zstyle :omz:plugins:ssh-agent lazy yes. Это, вероятно, стоит попробовать. Однако формулировка в разделе “идентификации” заставляет меня думать, что вам может понадобиться передать больше одной идентификации, поэтому, если простое удаление zstyle :omz:plugins:ssh-agent lazy yes не сработает и вы все равно хотите загрузить свою “умолчательную” идентификацию, попробуйте также изменить zstyle :omz:plugins:ssh-agent identities ~/.ssh/github_rsa на (предполагая, что ваша “умолчательная” идентификация – это ~/.ssh/id_rsa):
    zstyle :omz:plugins:ssh-agent identities ~/.ssh/id_rsa ~/.ssh/github_rsa
    
  • Не игнорировать предупреждение в разделе “Специфические настройки для Powerline 10k” и попытаться следовать рекомендациям в разделе “Настройки” / “lazy”:

    Вы можете активировать AddKeysToAgent, передав -o AddKeysToAgent=yes в команду ssh, или добавив AddKeysToAgent yes в ваш файл ~/.ssh/config

Ответ или решение

Чтобы решить проблему с добавлением ключей в агент SSH в Zsh с использованием плагина ssh-agent, нужно учитывать несколько моментов, описанных ниже.

Проблема

Вы описали, что используете zinit как менеджер плагинов и активно работаете с конфигурацией .zshrc, но ключи не добавляются в агент SSH. Попробуем разобраться, что может быть не так и как исправить ситуацию.

Анализ конфигурации

  1. Параметры плагина ssh-agent: В вашей конфигурации вы используете следующие стили (zstyle):

    zstyle :omz:plugins:ssh-agent quiet yes
    zstyle :omz:plugins:ssh-agent lazy yes
    zstyle :omz:plugins:ssh-agent agent-forwarding yes
    zstyle :omz:plugins:ssh-agent identities ~/.ssh/github_rsa

    Однако, как указано в документации плагина, использование параметра lazy делает невозможным загрузку идентичностей. Удаление этого параметра может помочь:

    zstyle :omz:plugins:ssh-agent quiet yes
    zstyle :omz:plugins:ssh-agent agent-forwarding yes
    zstyle :omz:plugins:ssh-agent identities ~/.ssh/github_rsa

    Если вы хотите загружать несколько ключей, можно изменить строку с identities. Например, если у вас есть еще пара ключей:

    zstyle :omz:plugins:ssh-agent identities ~/.ssh/id_rsa ~/.ssh/github_rsa
  2. Опция lazy: Если вы оставите lazy, то вышеупомянутое не будет работать, как уже упоминалось в документации. Вам необходимо решить, что важнее — использовать lazy или загружать ключи.

Альтернатива — использование конфигурации SSH

Если хотите продолжить использовать опцию lazy, то добавьте следующие строки в ваш файл конфигурации SSH (~/.ssh/config):

Host *
  AddKeysToAgent yes

Это позволит ssh-клиенту автоматически добавлять ключи в агентов.

Пример полного кода

Вот как может выглядеть ваша конфигурация .zshrc с необходимыми исправлениями:

# Ваша первоначальная конфигурация...

# ssh-agent настройки
zstyle :omz:plugins:ssh-agent quiet yes
# zstyle :omz:plugins:ssh-agent lazy yes  # закомментируйте или удалите эту строку
zstyle :omz:plugins:ssh-agent agent-forwarding yes
zstyle :omz:plugins:ssh-agent identities ~/.ssh/id_rsa ~/.ssh/github_rsa

# Остальная часть вашей конфигурации...

Заключение

Следуя данным рекомендациям, вы должны иметь возможность успешно добавлять ключи в агент SSH. Убедитесь, что они имеют правильные права доступа и не имеют пароля, если вы не хотите вводить его каждый раз. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обратиться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...