Na moim lokalnym hoście alpha
mam katalog foo
mapowany przez sshfs na host bravo
w następujący sposób:
$ sshfs charlie@bravo:/home/charlie ~/foo
Jednak na hoście bravo
jest inny użytkownik, delta, który chcę sudo /bin/su
, aby mógł pracować bravo:/home/delta
. delta
nie może być zalogowany przez ssh; z powodów, których nie mogę zmienić, sudo można przejść do delty tylko wtedy, gdy jesteś na komputerze.
Zwykle włączałbym ssh bravo
, potem sudo do delty, ale zastanawiam się, czy jest jakiś sposób, żebym mógł to zrobić, gdy mam sir montowany do domu przez Charliego.
Odpowiedzi:
Zależy to od systemu operacyjnego serwera, z którym się łączysz. Dla centOS 5 dodałeś do opcji montowania sshfs:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
W przypadku Ubuntu 9.10 (myślę, że może to być 9.04, ale prawdopodobnie jest taki sam dla obu) lub Debian, który dodałbyś:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"
.Aby znaleźć poprawną ścieżkę dla innych systemów z uruchomionym openSSH, uruchom
sudo grep Subsystem /etc/ssh/sshd_config
i poszukaj lokalizacji pliku binarnego sftp-server.
Może być konieczne skonfigurowanie sudo za pomocą NOPASS: {ścieżka do sftp-server} lub prewalidacja za pomocą
ssh user@host sudo -v
, abysudo
mieć zaktualizowany znacznik czasu dlanotty
. W moim przypadku moje dwa polecenia to:źródło
sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"
:?ssh host sudo -v
nie uszczęśliwia mojego sudo - chce tty, zanim pozwoli mi sudo. Myśli?ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"
Możesz użyć bindfs + sshfs, aby uzyskać dostęp do innych plików użytkownika (nawet root).
Najpierw montujesz swój „root” lub inny katalog pod swoim użytkownikiem za pomocą odwzorowanego identyfikatora użytkownika.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
a następnie po prostu sshfs do katalogu.
sshfs USER@SERVER:tmproot TARGET
Ale ze względów bezpieczeństwa lepiej nie mapować całego katalogu głównego,
/
ale tylko potrzebną część. Na przykład: Możesz użyć tej metody do zamontowania dowolnego innego katalogu użytkownika, na przykład plików z / var / www do ~ / www i zmiany mapowania użytkownika root, abyś miał do niego pełny dostęp.Jeśli potrzebujesz dostępu do zachowania identyfikatora użytkownika lub dostępu do wielu użytkowników, utworzę nowego użytkownika, na przykład „rootfs” o identyfikatorze UID = 0 i / bin / false i wykonam normalny sshfs.
źródło
Możesz spróbować (ale nie sądzę, żeby to zadziałało):
Nie rozumiem bardzo dobrze sshfs, więc możesz być w stanie uzyskać coś takiego do pracy, ale nie mogłem powiedzieć jak, i byłbym trochę zaskoczony.
Inną możliwością jest umieszczenie polecenia „sudo / bin / su bravo” w ~ / .ssh / rc, ale wpłynęłoby to na wszystkie twoje podłączenia fs (zakładając, że zadziałało, co również wątpię), a także na normalne użycie ssh .
Przepraszam za bycie debbie.
źródło
Na podstawie dedukcji uważam, że nie można tego osiągnąć za pomocą prostego polecenia.
Wynika to z tego, że sshfs wywołuje ssh bez przekazywania żadnej komendy, ale zamiast tego używa SFTP, który jest podsystemem SSH.
Z strony podręcznika sshfs :
Ponadto zmiana bieżącego użytkownika (lub „su” lub „sudo”) nie jest częścią protokołu SFTP, choć wydaje się, że jest to bardzo często wymagana funkcja.
źródło
Prawdopodobnie najlepszym sposobem są uprawnienia do plików, jak proponuje @artifex.
Jak mówi @Weboide, nie jest to możliwe przez sshfs.
Ale myślę, że można stworzyć prosty skrypt, nazwijmy to
sudossh
, że zajmie swoimi$PWD
, przekształcić go/home/delta/
i uruchom polecenie przezssh
isudo
na komputerze zdalnym.Coś takiego:
Następnie możesz wykonać
sudossh command
i pamiętać o użyciu ścieżek względnych.Jeśli używasz ssh-agent, po prostu musisz wprowadzić
sudo
hasło.źródło
Moje rozwiązanie jest cringingly brzydki (dzięki kilku warstw ciąg ucieczki), ale będzie to odczytać ścieżkę
sftp-server
z/etc/ssh/sshd_config
i wykonać go przezsudo
. Co teraz, jeślisshd_config
nie znajduje się pod/etc/ssh
? Może wyszukiwanie wssh
pliku binarnym za pomocąstrings
igrep
?źródło