Запуск вывода ' ssh-agent` в fish; что делает `setenv`?

когда я хочу запустить (или перезапустить) ssh-agent, это дает мне несколько команд, которые я должен выполнить, выполнив eval $(ssh-agent). Конечно, это не удается для рыбы, так как он дает синтаксис для bash или csh.

команды выглядят так:

SSH_AUTH_SOCK=/var/folders/v4/c116f_790t7g58lh3jbr7_vm0000gq/T//ssh-L95xhmGl9FZo/agent.36846; export SSH_AUTH_SOCK;
SSH_AGENT_PID=36847; export SSH_AGENT_PID;
echo Agent pid 36847;

или для csh:

setenv SSH_AUTH_SOCK /var/folders/v4/c116f_790t7g58lh3jbr7_vm0000gq/T//ssh-Tf8etHZfP9k3/agent.36873;
setenv SSH_AGENT_PID 36874;
echo Agent pid 36874;

версия csh работает без жалоб, когда я делаю eval (ssh-agent -c), а потом echo $SSH_AGENT_PID $SSH_AUTH_SOCK дает ожидаемый результат. Однако новые оболочки не сохраняют эти переменные. Что значит setenv do? явно это sets переменные как-то, но это нигде в документации. Если я запускаю новый терминал, переменные теряются, поэтому я не уверен, что они экспортируются?

я только что нашел это setenv является функцией рыбы, с определением set -gx, так что я предполагаю, что он устанавливает переменную как global переменная и экспортирует ее. У меня нет хорошего понимания области видимости переменной, так что это подходящая вещь для ssh-agent переменные?

для контекста, я делаю это на основе инструкций на github. Я использую ключ ssh для github в течение многих лет и никогда не делал ssh-agent или ssh-add вещь, но я заметил это при установке на новом компьютере. Также кажется, что os x запускает ssh-agent самостоятельно (или что-то еще, что я давно установил), потому что существует $SSH_AUTH_SOCK уже. Так что, может быть, это не важно? ssh-add работает без жалоб, даже без ssh-agent.

14
задан askewchan
21.11.2022 15:54 Количество просмотров материала 2459
Распечатать страницу

2 ответа

Я написал это некоторое время назад:

function ssh_agent --description 'launch the ssh-agent and add the id_rsa identity'
    if begin
            set -q SSH_AGENT_PID
            and kill -0 $SSH_AGENT_PID
            and grep -q '^ssh-agent' /proc/$SSH_AGENT_PID/cmdline
    end
        echo "ssh-agent running on pid $SSH_AGENT_PID"
    else
        eval (command ssh-agent -c | sed 's/^setenv/set -Ux/')
    end
    set -l identity $HOME/.ssh/id_rsa
    set -l fingerprint (ssh-keygen -lf $identity | awk '{print }')
    ssh-add -l | grep -q $fingerprint
        or ssh-add $identity
end

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

2
отвечен glenn jackman 2022-11-22 23:42

это работает для меня на FreeBSD 10.2. Добавьте в ~/следующее.конфиг/рыба/конфиг.рыба:

if begin; test -z (command pgrep ssh-agent); and not test -S $SSH_AUTH_SOCK; end
    eval (command ssh-agent -c | sed -E 's/^setenv (.+);$/set ; set -Ux ;/')
end

первый набор, без-Ux, устанавливает переменные окружения для первого терминала, который запускает ssh-agent. Второй набор, с -Ux, устанавливает переменные окружения для всех остальных терминалов.

1
отвечен fizk 2022-11-23 01:59

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

Ваш ответ

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

Имя
Вверх