Ausführen der Ausgabe von "ssh-agent" in fish; was macht `setenv`

1

Wann möchte ich starten (oder neu starten) ssh-agentEs gibt mir ein paar Befehle, die ich ausführen soll eval $(ssh-agent). Natürlich schlägt dies für Fische fehl, da es die Syntax für bash oder csh gibt.

Die Befehle sehen wie folgt aus:

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;

oder für 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;

Die csh-Version läuft ohne Beanstandung, wenn ich das tue eval (ssh-agent -c), und dann echo $SSH_AGENT_PID $SSH_AUTH_SOCK gibt die erwartete Ausgabe an. In neuen Shells bleiben diese Variablen jedoch nicht erhalten. Was macht setenv tun? klar es set s Variablen irgendwie, aber es ist nirgends in der Dokumentation. Wenn ich ein neues Terminal starte, gehen die Variablen verloren, sodass ich nicht sicher bin, ob sie exportiert wurden.

Das habe ich gerade gefunden setenv ist eine Fischfunktion mit Definition set -gxIch nehme an, es setzt die Variable als global Variable und exportiert es. Ich verstehe den Gültigkeitsbereich der Variablen nicht gut, deshalb ist das das Richtige für die ssh-agent Variablen?

Für den Kontext mache ich dies auf der Grundlage von Anweisungen bei github . Ich benutze seit Jahren einen SSH-Schlüssel für Github und habe das noch nie getan ssh-agent oder ssh-add Ding, aber ich bemerkte es beim Einrichten auf einem neuen Computer. Es scheint auch, dass os x ssh-agent alleine ausführt (oder etwas anderes, das ich in der Vergangenheit schon lange eingerichtet habe), weil es es gibt $SSH_AUTH_SOCK bereits. Also ist es vielleicht nicht wichtig, dies zu tun? ssh-add läuft ohne Beanstandung auch ohne Rennen ssh-agent.

askewchan
quelle
Geben Sie an einer Fischaufforderung Folgendes ein type setenv
glenn jackman
Danke @glenn, das habe ich mit entdeckt functions setenvsiehe mein edit. type ist aber schön. Es scheint eine Kombination von zu sein which und functions.
askewchan

Antworten:

2

Ich habe das vor einiger Zeit geschrieben:

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 $2}')
    ssh-add -l | grep -q $fingerprint
        or ssh-add $identity
end

Zur Hervorhebung verwende ich create Universal- Variablen aus der Ausgabe von ssh-agent und setenv werden erstellt global Variablen

glenn jackman
quelle
Was ist kill -0? Ich sehe das nicht in der Manpage. Und /proc existiert nicht auf meinem System (vielleicht hat os x es nicht).
askewchan
kill -0 pid Gibt erfolgreich zurück, wenn diese PID ein laufender Prozess ist, andernfalls ein Fehler. ich benutze /proc um zu überprüfen, ob eine laufende pid tatsächlich ein ssh-agent-Prozess ist: Es gibt andere Möglichkeiten, dies zu tun (pgrep, ps-Ausgabe analysieren)
glenn jackman
Dies funktioniert unter Mac OS X, wenn ich das ändere /proc/ Leitung zu: and ps -p $SSH_AGENT_PID | grep -q 'ssh-agent'
askewchan
1
Ich empfehle, das Grep-Muster zu ändern '[s]sh-agent' Sie stimmen also nicht versehentlich mit dem Befehl grep selbst in der Ausgabe von ps überein.
glenn jackman
Dies funktioniert auf Cygwin: P
Zardoz89
1

Dies funktioniert für mich unter FreeBSD 10.2. Fügen Sie ~ / .config / fish / config.fish Folgendes hinzu:

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 \1; set -Ux \1;/')
end

Der erste Satz ohne -Ux legt die Umgebungsvariablen für das erste Terminal fest, das ssh-agent startet. Der zweite Satz mit -Ux legt die Umgebungsvariablen für alle anderen Terminals fest.

fizk
quelle