Próbuję utworzyć skrypt powłoki, który między innymi uruchamia ssh-agent i dodaje klucz prywatny do agenta. Przykład:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Problem polega na tym, że ssh-agent najwyraźniej uruchamia kolejną instancję $ SHELL (w moim przypadku bash) iz punktu widzenia skryptu wykonuje wszystko i ssh-add i wszystko poniżej nie jest uruchamiane.
Jak mogę uruchomić ssh-agent z mojego skryptu powłoki i sprawić, by poruszał się dalej po liście poleceń?
exit
załatwiło sprawę.Umieść u góry skryptu następujące elementy:
Twój skrypt powinien wyglądać następująco:
Wyjaśnienie
Backticks wokół
ssh-agent
zbierają swoje wyjście.eval
zbiera dane wyjściowe, łączy je w jedno polecenie, a następnie wykonuje polecenie. Następnie możesz użyć,ssh-add
aby podać swoje kluczowe dane uwierzytelniające.źródło
eval $(ssh-agent)
bash -i
na końcu skryptu.Zwykle robię coś takiego w skryptach, które wymagają agenta.
Zasadniczo pierwsza rzecz, którą wykonuje skrypt, sprawdza, czy agent jest uruchomiony. Jeśli nie jest to exec, służy do uruchomienia nowego procesu zamiast skryptu. Agent jest uruchamiany, klucze są dodawane, a na koniec skrypt jest wywoływany ponownie (patrz
$0
).źródło
.. "ssh-add ; $0 $*"
lub.. "ssh-add ; $0 $@"
zamiast tego, które mogą działać. Co nie byłoby idealne, ale z pewnością działałoby w wielu przypadkach. Najlepszym rozwiązaniem jest prawie zawsze uruchomienie agenta przed czymkolwiek innym, jest to po prostu coś, co może być przydatne w mało znanych przypadkach.Znalazłem to dla mnie.
Tworzę proces ssh-agent, dodaję klucz, robię to, co muszę, a następnie zabijam. Nie musisz sprawdzać, czy działa później.
źródło
W tym przypadku lepiej jest użyć pęku kluczy
Debian / Ubuntu:
RHEL / Fedora / CentOS
Dodaj w swoim .bashrc:
źródło
Znalazłem rozwiązanie Zoredache'a, że klucz byłby dostępny dla każdej powłoki, która ma ten sam ssh-agent, co powłoka, która wywołała skrypt. Z oczywistych względów bezpieczeństwa chciałem tego uniknąć w skrypcie wymagającym dostępu roota do zdalnego komputera.
Znalazłem umieszczenie następującego shebang u góry skryptu:
źródło
Próbowałem i wiele, a rozwiązaniem, które w końcu zadziałało, było zastąpienie mojego hasła pustym ciągiem.
źródło