Nie udało mi się znaleźć pytania opisującego ten konkretny scenariusz.
Próbuję wykonać bardzo podstawowy skrypt bash, aby pobrać rejestrowanie z wielu komputerów. Uruchamiam skrypt lokalnie, ale muszę uzyskać dostęp do zewnętrznego komputera za pośrednictwem ssh, a także sudo do uprzywilejowanego użytkownika na tym komputerze ...
ssh myuser@machine.net
sudo su - privledged_user
cat logs > file.txt
Uruchomienie tego z sh -x ujawnia, że bash utknął na linii 'ssh'. Próbowałem więc to zmienić:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
To również wydaje się utknąć w nieskończoność. Czy istnieje lepsze rozwiązanie tego problemu? Nie widzę sposobu na użycie sudo su z tego, co mogę powiedzieć ...
Dzięki za wszelką pomoc!
Odpowiedzi:
Sposób, w jaki to osiągam w moim obecnym środowisku, to uruchomić ssh z
-t
flagą, która wymusza alokację tty, a następnie uruchomić w nim root sudo -u, w następujący sposób:Mam swoje konto w sudoers po drugiej stronie, więc hasło nie jest wymagane.
W tym przykładzie pokazano różne sposoby wykonania tego w ramach jednej sesji ssh, w tym uruchamianie wielu poleceń za pomocą bash lub podpowłoki. Zauważ również, że jeśli umieścisz powyższy kod w skrypcie wykonywalnym, możesz przekazać argumenty wiersza poleceń (1 $ i 2 $) do ssh, które zostaną rozwinięte, a następnie odniesione po drugiej stronie.
źródło
Jeśli nie chcesz lub nie możesz powstrzymać sudo od pytania o hasło, jedną prostą sztuczką jest odczytanie go lokalnie i zapisanie w zmiennej lokalnej:
źródło
Jeśli sudo jest skonfigurowane tak, aby zezwalało na polecenia bez hasła, powinno to robić, co chcesz:
lub
w zależności od tego, czy chcesz
file.txt
utworzyć plik lokalnie czy zdalnie.W przeciwnym razie oto sposób na przekazanie hasła użytkownika zdalnego do
sudo
:źródło