plik kropkowy nie jest pozyskiwany podczas uruchamiania polecenia przez ssh

11

Kiedy interaktywnie uruchamiam mój program, działa dobrze:

ssh somehost
$ ~/some/path/somescript.py

Kiedy uruchamiam mój program bezpośrednio przez ssh, to nie działa. Zmienna PYTHONPATHnie jest ustawiona, ponieważ .bashrcnie jest pozyskiwana.

ssh somehost ~/some/path/somescript.py

Jeśli uruchomię ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py', działa dobrze.

Ale ten drugi nie działałby dla niektórych innych ludzi, np. Używając tcsh i nie mając go ~/.bashrcwcale).

Co jest polecenie, aby uruchomić poprzez ssh na rzecz innego hosta, który działa dla wszystkich muszli?

bzdjamboo
źródło
1
Odpowiedzi tutaj, stackoverflow.com/questions/820517/bashrc-at-ssh-login , w zasadzie ssh nie źródło .bashrc, musisz zdobyć .bashrc przez .bash_profile lub inne opcje.
EightBitTony,
1
@EightBitTony: Nie, to inny problem. Pytanie bzdjamboo dotyczy sesji nieinteraktywnej.
Gilles „SO - przestań być zły”,
Właściwie ostatnia odpowiedź w linku, który opublikowałem, wydaje się być cenna, ssh pobiera źródło .bashrc, ale nie wykonuje się z powodu sprawdzenia interaktywności. Doceniam jednak, że twoja odpowiedź obejmuje wszystkie podstawy.
EightBitTony
3
@EightBitTony: Na to pytanie zaakceptowana odpowiedź jest dobrym rozwiązaniem dla pytającego, ale odpowiedzi nie opowiadają pełnej historii. Sam SSH niczego nie pozyskuje. Jeśli Twój login powłoki bash wywoływany jako bash, a następnie nim źródeł .bash_profilelub .profiledo interaktywnego logowania, a .bashrcna nieinterakcyjnym logowania. Jeśli twoja powłoka logowania jest wywoływana jako bash shlub ash lub ksh, to pobiera .profileinteraktywne logowanie i nic dla nieinteraktywnego logowania.
Gilles 'SO - przestań być zły'

Odpowiedzi:

12

Nie ma standardowego pliku dla użytkownika uruchamianego dla nieinteraktywnych loginów. Musisz albo uczynić program samodzielnym, aby mógł znaleźć jego zależności bez polegania na domyślnych zmiennych środowiskowych, lub jawnie ustawić środowisko, zwykle za pomocą

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

Nie powinieneś ustawiać zmiennych środowiskowych w .bashrc: ten plik jest przeznaczony dla interaktywnych powłok i jest odczytywany w każdym przypadku bash. Należy ustawić zmienne środowiskowe .profile, które są odczytywane podczas logowania. Oprócz bardzo małej liczby osób, które nie używają powłoki w stylu Bourne'a jako powłoki logowania, .profiledziałają dla wszystkich, bez względu na to, czy używają bash, zsh czy csh lub ryby interaktywnie. Zobacz także Różnica między .bashrc i .bash_profile , Których plików instalacyjnych należy użyć do skonfigurowania zmiennych środowiskowych za pomocą bash? .

To powiedziawszy, istnieje sposób na źródło skryptu za każdym razem, gdy logujesz się przez ssh przy użyciu określonego klucza. Zobacz Czy istnieje sposób na przekazanie informacji o konfiguracji powłoki podczas SSHing do hosta? , sh pliki startowe przez ssh .

Gilles „SO- przestań być zły”
źródło
Jak teraz oznaczyć „odpowiedź”? :-)
bzdjamboo
Po lewej stronie tej sekcji odpowiedzi powinny znajdować się strzałki w górę i w dół oraz licznik głosów. Tuż poniżej powinien znajdować się zarys pola wyboru. Możesz kliknąć tę opcję, aby aktywować funkcję akceptacji odpowiedzi.
Caleb
Dziękuję wam wszystkim, ale najwyraźniej wasze odpowiedzi nie rozwiązały mojego problemu.
bzdjamboo
Oto nieco nowsze sformułowanie problemu i moje obecne zrozumienie jego źródła.
bzdjamboo
Wydaje się, że nie mogę dodać więcej niż 60 znaków tutaj, więc muszę ponownie zadać pytanie osobno. Przepraszam ab. że. Znów ten nie został rozwiązany, a kopanie znacznie więcej przez kilka dni nie pomogło.
bzdjamboo
0

Miałem ten sam problem, ale dla mnie rozwiązanie było inne. Mój użytkownik nie był skonfigurowany do używania bash jako powłoki, zamiast tego używał zsh jako powłoki, dlatego pliki kropek bash nie były uruchamiane przy logowaniu. Otwórz / etc / passwd za pomocą edytora tekstu i poszukaj swojej nazwy użytkownika i używanej powłoki:

root:x:0:0:root:/root:/bin/zsh

Tak wygląda mój wpis użytkownika. Zauważ, że jest napisane / bin / zsh zamiast / bin / bash. W przypadku Zsh poprawnym plikiem kropkowym jest ~ / .zprofile. Jego zawartość będzie uruchamiana przy każdym logowaniu przy użyciu ssh.

Martin Hansen
źródło