как запустить ssh-agent в fish shell?

как запустить ssh-agent в fish shell?

Я бежал eval `ssh-agent -s\` и получаю эту ошибку

fish: Unknown command: `ssh-agent

решение1

Ваш вопрос состоит из двух частей:

  • Почему при попытке возникает ошибка eval `ssh-agent -s`?
  • Как включить ssh-agentв оболочке Fish

Для первого, функция, которую вы ищете, называется "подстановка команд". Есть два способа сделать это в оболочках Bash/POSIX:

  • Обратные кавычки (например `command`, ), как вы используете
  • $(command)

Использование обратных кавычек крайне не рекомендуется, поэтому, если вы натыкаетесь на документацию или блог, использующие их, знайте, что они сильно устарели (или не известны).

В Fish, как вы обнаружили, (command)группировка является "наиболее поддерживаемым" способом подстановки команд. Однако, начиная с Fish 3.4.0, эта $(command)форма также работает. Поэтому используйте либо:

  • eval (ssh-agent -c)или
  • eval $(ssh-agent -c)будет работать
Как запустить ssh-agent в Fish Shell?

Однако я бы рекомендовал использоватьkeychainдля упрощения ssh-agentиспользования в Fish (и других оболочках). Не обращайте внимания на часть веб-страницы, которая говорит (как @Charliesneath указывает в комментариях),«В настоящее время брелок несовместим с Fish Shell». Веб-страница просто давно не обновлялась.

На самом деле Keychain имеет встроенную поддержку Fish (добавленную в 2017 году) и может использовать универсальные переменные для синхронизации ключей между несколькими сеансами оболочки.

Например, если у вас открыты две сессии оболочки Fish и вы запускаете ssh-agent/ ssh-addв одной из них, вам все равно нужно запустить то же самое в другой и снова ввести пароль. Естьспособы совместного использования агента между сеансами оболочки, но Keychain сделает это за вас.

Keychain можно установить напрямую из репозиториев большинства дистрибутивов. Например, sudo apt install keychain.

Его можно включить в Fish с помощью:

keychain --eval <keyfile> | source

Я настроил это в Fish следующим образом.

  • Создайте следующий скрипт в~/.config/fish/conf.d/keychain.fish

    if status is-login
        and status is-interactive
        # To add a key, set -Ua SSH_KEYS_TO_AUTOLOAD keypath
        # To remove a key, set -U --erase 
    SSH_KEYS_TO_AUTOLOAD[index_of_key]
        keychain --eval $SSH_KEYS_TO_AUTOLOAD | source
    end
    
  • set -Ua SSH_KEYS_TO_AUTOLOAD ~/.ssh/id...для любого ключа(ей), который вы хотите использовать.

Вот и все. Когда вы запускаете оболочку Fish для входа, если ключ не разблокирован, Keychain запросит пароль и добавит его в общий ssh-agent. Если он уже разблокирован, то он не будет спрашивать снова.

Конечно, вы можете упростить скрипт, встроив статические имена ключей. Я предпочитаю универсальные переменные, чтобы сохранить динамичность скрипта. Это позволяет хранить один скрипт в моем репозитории dotfiles, даже если я использую разные ключи в разных системах.

решение2

Я понимаю это решение

бегать

eval (ssh-agent -c)

ссылка:https://wiki.archlinux.org/title/Fish#Evaluate_ssh-agent

решение3

Я использую fish_ssh_agentот gihubhttps://github.com/ivakyb/fish_ssh_agent

github/ivakyb/fish_ssh_agent

В этом репозитории также есть несколько ценных советов по теме SSH, SSH-agent, Fish-shell.

Связанный контент