
Ich habe ausgeführt, eval `ssh-agent -s\`
ich erhalte diesen Fehler
fish: Unknown command: `ssh-agent
Antwort1
Ihre Frage besteht aus zwei Teilen:
- Warum wird beim Versuch eine Fehlermeldung angezeigt
eval `ssh-agent -s`
? - So aktivieren Sie
ssh-agent
die Fish-Shell
Zunächst einmal heißt die Funktion, nach der Sie suchen, „Befehlsersetzung“. In Bash/POSIX-Shells gibt es hierfür zwei Möglichkeiten:
- Backticks (z. B.
`command`
), wie Sie sie verwenden $(command)
Von der Verwendung von Backticks wird dringend abgeraten. Wenn Sie also auf eine Dokumentation oder ein Blog stoßen, in der/dem diese verwendet werden, seien Sie sich bewusst, dass diese/r stark veraltet ist (oder nicht bekannt ist).
Wie Sie festgestellt haben, (command)
ist die Gruppierung in Fish die „am besten unterstützte“ Methode zur Befehlsersetzung. Ab Fish 3.4.0 $(command)
funktioniert diese Form jedoch auch. Verwenden Sie also entweder:
eval (ssh-agent -c)
odereval $(ssh-agent -c)
wird funktionieren
Wie führe ich einen SSH-Agenten in der Fish-Shell aus?
Ich empfehle jedoch die Verwendung vonkeychain
zur Vereinfachung ssh-agent
der Verwendung in Fish (und anderen Shells). Ignorieren Sie den Teil der Webseite, der besagt (wie @Charliesneath in den Kommentaren anmerkt):„Derzeit ist der Schlüsselbund nicht mit der Fish-Shell kompatibel.“ Die Webseite wurde seit einiger Zeit nicht mehr aktualisiert.
Keychain verfügt tatsächlich über integrierte Unterstützung für Fish (hinzugefügt im Jahr 2017) und kann universelle Variablen nutzen, um Ihre Schlüssel über mehrere Shell-Sitzungen hinweg synchron zu halten.
Wenn Sie beispielsweise zwei Fish Shell-Sitzungen geöffnet haben und in einer davon ssh-agent
/ ausführen ssh-add
, müssen Sie dasselbe auch in der anderen ausführen und Ihr Passwort erneut eingeben. Es gibtMöglichkeiten zum gemeinsamen Nutzen des Agenten für Shell-Sitzungen, aber Keychain erledigt das für Sie.
Keychain kann direkt aus den Repositories der meisten Distributionen installiert werden. Zum Beispiel sudo apt install keychain
.
Es kann in Fish mit folgendem aktiviert werden:
keychain --eval <keyfile> | source
Ich habe dies in Fish wie folgt eingerichtet.
Erstellen Sie das folgende Skript in
~/.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...
für die Taste(n), die Sie verwenden möchten.
Das ist so ziemlich alles. Wenn Sie eine Fish-Shell zum Anmelden starten und der Schlüssel nicht entsperrt ist, fragt Keychain nach dem Passwort und fügt es einer freigegebenen Datei hinzu ssh-agent
. Wenn es bereits entsperrt ist, wird nicht erneut danach gefragt.
Sie können das Skript natürlich vereinfachen, indem Sie statische Schlüsselnamen einbetten. Ich bevorzuge universelle Variablen, um das Skript dynamisch zu halten. Dadurch kann ein einzelnes Skript in meinem Dotfiles-Repository gespeichert werden, obwohl ich auf verschiedenen Systemen unterschiedliche Schlüssel verwende.
Antwort2
Ich bekomme diese Lösung
laufen
eval (ssh-agent -c)
Referenz:https://wiki.archlinux.org/title/Fish#Evaluate_ssh-agent
Antwort3
Ich benutze fish_ssh_agent
von gihubhttps://github.com/ivakyb/fish_ssh_agent
Dieses Repo enthält auch einige wertvolle Hinweise zum Thema SSH, SSH-Agent, Fish-Shell.