Mam kilka maszyn, na których ssh regularnie, tylko w celu sudo su
spędzenia reszty sesji zalogowanej jako użytkownik specjalnego przeznaczenia. Ogólny przepływ pracy to:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Chciałbym sprowadzić to do jednego linijki, którą mogę alias, więc mogę po prostu ustawić alias dla każdej maszyny i przejść do miejsca, w którym muszę być w jednym poleceniu, bez konieczności wpisywania płyty sudo su - specialuser
kotłowej. Mógłbym może skonfigurować me@othermachine
, aby sudo su
przy logowaniu, ale chciałbym zachować elastyczność, aby działać jako me
jeśli muszę.
( Uwaga: nie mam żadnej kontroli nad othermachine
tym, jak jest skonfigurowany; jest to ustalony przepływ pracy, do którego dołączyłem, gdy zostałem zatrudniony).
Moja pierwsza myśl była słuszna
ssh me@othermachine "sudo su - specialuser"
i tego rodzaju działa, ale nie daje mi żadnych wskazówek, ^C
zabija go i wylogowuje, i zakładam, że różne inne rzeczy prawdopodobnie również są złe.
Po przeczytaniu polecenia Uruchom zdalną ssh z opcją Full Login Shell wypróbowałem kilka bardziej egzotycznych rzeczy
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
i
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- z których nie spodziewałem się zadziałać, a nie zadziałały, ale pomyślałem, że powinienem wypróbować je dla kompletności (i aby uniknąć duplikatu); wyprodukowali tę samą powłokę bez monitów (druga z dodatkową premią bez powłoki do uzupełniania me
po exit
tej z drugiej specialuser
). I próbowałem
ssh me@othermachine "sudo su - specialuser -c bash -l"
ale to mnie dopadło
sudo: no tty present and no askpass program specified
Lepsze pomysły?
~/.profile
po krótkim opóźnieniu?sudo
uderzyć^C
? Jeśli nie mogę wymyślić nic lepszego, mógłbym spróbować.su me
zspecialuser
. Lub w.profile
lub.bashrc
, jeśli nie będziesz postępować zgodniesudo
zexit
, pierwszyexit
zabierze Cię z powrotemme
, a drugi zakończy sesję. Lub nawet użyj pliku flagi, więcsudo
jest poprzedzony[ -f ~/.keep.me ] && del ~/.keep.me
i następuje po nim[ \! -f ~/.keep.me ] && exit
: wtedy potrzebujesz tylko skryptu lub aliasu dla poleceniame
as:>~/.keep.me; exit
. Terazexit
zakończy sesję ime
wróci do sesji logowania./bin/bash
a nie prostebash
ze względów bezpieczeństwa (aby uniknąć trojana ). Zwłaszcza jeśli jest cośsudo
przed ...Odpowiedzi:
Ta linia powinna działać dla Ciebie
To rozwiązanie wyświetla monit lub nie zależy od
-t
przełącznikaNotatki od
man ssh
źródło
RequestTTY force
(co jest równe-t
) iRemoteCommand sudo su - specialuser
! Należy jednak pamiętać, że inne programy korzystające z SSH (takie jak scp, rsync itp.) Nie będą działać poprawnie dla tego hosta.