Zakładając, że użytkownik ma /bin/bash
powłokę /etc/passwd
. Następnie ssh user@host command
uruchamia polecenie za pomocą Bash. Jednak powłoka ta nie jest ani logowana, ani interaktywna, co oznacza, że ani ~/.bash_profile
nie ~/.bashrc
jest pozyskiwana. W takim przypadku, jak ustawić PATH
zmienną środowiskową, aby można było znaleźć i wykonać pliki wykonywalne? Czy zaleca się prefiks rzeczywistego polecenia source ~/.bashrc
?
18
.bashrc
jest pozyskiwany, ale prawdopodobnie ma test interaktywności u góry. Rzeczy, które umieściłeś przed tym sprawdzeniem, powinny mieć zastosowanie, i to właśnie robię, aby wymusić ŚCIEŻKĘ, gdy serwer nie zezwala na środowisko użytkownika ani używanie~/.pam_environment
.Odpowiedzi:
Masz kilka możliwości:
PATH
na serwerze w~/.ssh/environment
(musi być włączony przezPermitUserEnvironment yes
insshd_config
)..bashrc
: przedrostek polecenia za pomocą. ~/.bashrc
(lubsource
)Zależy to od przypadku użycia, w którą stronę pójdziesz.
źródło
~/.bashrc
Pozyskiwanie ręczne nie jest konieczne, dzieje się to domyślnie. To wydaje mi się złym pomysłem.$PATH
nie rozwija się~/.ssh/environment
, przynajmniej nie wOpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
.PermitUserEnvironment
(domyślnie w najnowszych wersjach)PATH="$PATH:/new/path"
do mojej,~/.ssh/environment
kiedy powinno byćPATH=$PATH:/new/path
Przyrównujesz ustawienia lokalne do ustawień zdalnych .
Lokalnie instancja bash, bieżąca działająca powłoka, w której piszesz:
Wykona polecenie ssh (nic więcej) jako ssh klienta.
Aby to zrobić, lokalna powłoka nie musi uruchamiać podpowłoki, nowej powłoki ani logować się.
Polecenie jest wykonywane jako
ls
polecenie: lokalnie.Jest to komenda ssh klienta, która otwiera połączenie sieciowe ze zdalnym systemem, gdzie, jeśli jest poprawnie uwierzytelnione, nowe zostanie powłoka, aby wykonać komendę zapisaną jako argument dla ssh lub, jeśli nie podano żadnego argumentu, oczekiwać dalszych poleceń na tym połączeniu.
Ta nowa powłoka zdalna koniecznie będzie powłoką logowania, ponieważ użytkownik zdalny (do tego systemu) musi zostać uwierzytelniony podczas logowania. Lub, jeśli podano określone polecenie, po prostu uruchom je z uprawnieniami uwierzytelnionego użytkownika.
Możesz zobaczyć, które pliki są pobierane, dodając
$file sourced
na początku każdego pliku (w systemie zdalnym ) (root jest potrzebny do zmiany/etc/
plików):A potem po prostu uruchom konsolę ssh:
W tym przypadku oba
bashrc
pliki zostały odczytane, ponieważ każdyprofile
plik zawierał polecenia do ich włączenia, a nie dlatego, że powłoka logowania bezpośrednio je pozyskała.W tym systemie, gdzie
bashrc
jest czytany w obu przypadkach.Nie trzeba dodawać a
source ~/.bashrc
do polecenia, aby wykonać.Zmień ŚCIEŻKĘ
Wszystko, co musisz zrobić, to podać prawidłowe ustawienia, aby zmienić „$ PATH”
/etc/bash.bashrc
dla wszystkich użytkowników, którzy uruchamiają powłokę w tym systemie. Lub~/.bashrc
dla każdego użytkownika, który tego potrzebuje. Możesz dodać (lub edytować) szkielet użytkownika,.bashrc
aby/etc/skel/
każdy nowy użytkownik mógł utworzyć właściwy plik.Powyższe dotyczy tylko bash. Jeśli potrzebujesz ustawienia do działania dla wszystkich powłok, prawdopodobnie ustaw zmienną środowiskową PATH za pomocą pliku ssh
~/.ssh/environment
dla każdego użytkownika, który tego potrzebuje. Lub użyj/etc/ssh/sshrc
do ustawienia globalnego w systemie, w którym działa serwer ssh (proszę przeczytać sekcję Pliki,man sshd
aby uzyskać dodatkowe informacje).źródło