Ich versuche ein Shell-Skript zu erstellen, das unter anderem ssh-agent startet und dem Agenten einen privaten Schlüssel hinzufügt. Beispiel:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Das Problem dabei ist, dass ssh-agent anscheinend eine weitere Instanz von $ SHELL startet (in meinem Fall bash) und aus der Sicht des Skripts alles und ssh-add ausgeführt und nichts darunter nie ausgeführt wird.
Wie kann ich ssh-agent von meinem Shell-Skript aus ausführen und es in der Befehlsliste in Bewegung halten?
exit
hat den Trick gemacht.Fügen Sie Folgendes oben in Ihr Skript ein:
Ihr Skript sollte folgendermaßen aussehen:
Erläuterung
Die Backticks
ssh-agent
sammeln ihre Ausgabe.eval
sammelt diese Ausgabe, verknüpft sie zu einem einzigen Befehl und führt dann den Befehl aus. Anschließend können Siessh-add
Ihre Schlüsselanmeldeinformationen eingeben.quelle
eval $(ssh-agent)
bash -i
am Ende des Skripts stand.Ich neige dazu, so etwas in Skripten zu tun, die einen Agenten erfordern.
Grundsätzlich überprüft das Skript als Erstes, ob ein Agent ausgeführt wird. Ist dies nicht der Fall, wird exec verwendet, um anstelle des Skripts einen neuen Prozess zu starten. Der Agent wird gestartet, Schlüssel hinzugefügt und schließlich das Skript erneut aufgerufen (siehe
$0
).quelle
.. "ssh-add ; $0 $*"
oder.. "ssh-add ; $0 $@"
stattdessen verwenden, was möglicherweise funktioniert. Was nicht perfekt wäre, aber sicherlich in vielen Fällen funktionieren würde. Die beste Lösung ist fast immer, dass Ihr Agent ohnehin vor allem anderen ausgeführt wird. Dies ist nur etwas, das in unklaren Fällen nützlich sein kann.Ich fand das funktioniert für mich.
Ich erstelle den Prozess ssh-agent, füge den Schlüssel hinzu, tue, was ich tun muss, und beende ihn dann. Keine Notwendigkeit zu überprüfen, ob es später ausgeführt wird.
quelle
In diesem Fall ist es besser, den Schlüsselbund zu verwenden
Debian / Ubuntu:
RHEL / Fedora / CentOS
Fügen Sie Ihrem .bashrc Folgendes hinzu:
quelle
Bei der Lösung von Zoredache stellte sich heraus, dass der Schlüssel für jede Shell verfügbar ist, die denselben ssh-Agenten wie die Shell verwendet, die das Skript aufgerufen hat. Ich wollte dies in einem Skript vermeiden, das aus offensichtlichen Sicherheitsgründen Root-Zugriff auf einen Remotecomputer erforderte.
Ich habe festgestellt, dass der folgende Shebang am Anfang des Skripts steht:
quelle
Ich habe viel versucht und die Lösung, die schließlich funktionierte, bestand darin, meine Passphrase durch eine leere Zeichenfolge zu ersetzen.
quelle