когда я хочу запустить (или перезапустить) 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? явно это set
s переменные как-то, но это нигде в документации. Если я запускаю новый терминал, переменные теряются, поэтому я не уверен, что они экспортируются?
я только что нашел это setenv
является функцией рыбы, с определением set -gx
, так что я предполагаю, что он устанавливает переменную как global
переменная и экспортирует ее. У меня нет хорошего понимания области видимости переменной, так что это подходящая вещь для ssh-agent
переменные?
для контекста, я делаю это на основе инструкций на github. Я использую ключ ssh для github в течение многих лет и никогда не делал ssh-agent
или ssh-add
вещь, но я заметил это при установке на новом компьютере. Также кажется, что os x запускает ssh-agent самостоятельно (или что-то еще, что я давно установил), потому что существует $SSH_AUTH_SOCK
уже. Так что, может быть, это не важно? ssh-add
работает без жалоб, даже без ssh-agent
.