file dot non fornito durante l'esecuzione di un comando tramite ssh


11

Quando eseguo il mio programma in modo interattivo, funziona benissimo:

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

Quando eseguo il mio programma direttamente su ssh, non funziona. La variabile PYTHONPATHnon è impostata, perché .bashrcnon proviene.

ssh somehost ~/some/path/somescript.py

Se corro ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py', funziona benissimo.

Ma quest'ultimo non funzionerebbe per altre persone, ad esempio usando tcsh e non avendo ~/.bashrcaffatto).

Qual è il comando per eseguire una cosa tramite ssh su un altro host che funziona per tutte le shell?


1
Risposto qui, stackoverflow.com/questions/820517/bashrc-at-ssh-login , in sostanza, ssh non genera .bashrc, è necessario eseguire il sorgente di .bashrc tramite .bash_profile o altre opzioni.
EightBitTony,

1
@EightBitTony: No, questo è un problema diverso. La domanda di bzdjamboo riguarda una sessione non interattiva.
Gilles 'SO- smetti di essere malvagio' il

In realtà l'ultima risposta nel link che ho pubblicato sembra essere preziosa, ssh ha origine .bashrc, ma non viene eseguita a causa del controllo per essere interattivo. Apprezzo tuttavia che la tua risposta copra tutte le basi.
EightBitTony,

3
@EightBitTony: su quella domanda, la risposta accettata è una buona soluzione per chi chiede ma le risposte non raccontano la storia completa. SSH stesso non fornisce nulla. Se la shell di login è invocato come bash bash, allora esso fonti .bash_profileo .profileper un accesso interattivo, e .bashrcper un account di accesso non interattivo. Se la shell di accesso viene invocata bash come sho ash o ksh, si genera .profileun accesso interattivo e nulla per un accesso non interattivo.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


12

Non esiste un file standard per utente eseguito per accessi non interattivi. È necessario rendere autonomo il programma, in modo che sia in grado di trovare le sue dipendenze senza fare affidamento su variabili di ambiente non predefinite, oppure impostare esplicitamente l'ambiente, in genere con

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

Non dovresti impostare le variabili d'ambiente in .bashrc: questo file è pensato per shell interattive e viene letto in ogni istanza di bash. È necessario impostare le variabili di ambiente .profile, che vengono lette al momento dell'accesso. A parte il numero molto limitato di persone che non usano una shell in stile Bourne come shell di accesso, .profilefunziona per tutti, sia che utilizzino bash o zsh o csh o pesce in modo interattivo. Vedi anche Differenza tra .bashrc e .bash_profile , quali file di installazione dovrebbero essere usati per impostare le variabili d'ambiente con bash? .

Detto questo, c'è un modo per creare uno script ogni volta che accedi su ssh con una chiave particolare. Vedi Esiste un modo per inviare le informazioni di configurazione della shell quando SSHing su un host? , sh file di avvio su ssh .


Ora, come posso contrassegnarlo come "risposto"? :-)
bzdjamboo

Sul lato sinistro di questa sezione di risposta dovrebbero essere presenti frecce di voto su e giù e un contatore di voti. Appena sotto dovrebbe esserci il contorno di una casella di controllo. Puoi fare clic per attivare la funzione accetta risposta.
Caleb,

Grazie ancora a tutti, ma a quanto pare le vostre risposte non hanno risolto il mio problema.
bzdjamboo,

Ecco una nuova formulazione del problema e la mia attuale comprensione della radice di esso.
bzdjamboo,

Sembra che non posso aggiungere più di 60 caratteri qui, quindi devo porre di nuovo la mia domanda separatamente. Scusa ab. quello. Ancora una volta, questo non è stato risolto e scavare molto di più per un paio di giorni non ha aiutato.
bzdjamboo,

0

Ho avuto lo stesso problema, ma per me la soluzione era diversa. Il mio utente non è stato configurato per utilizzare bash come shell, ha usato invece zsh come shell, quindi i file dot bash non sono stati eseguiti all'accesso. Apri / etc / passwd con un editor di testo e cerca il tuo nome utente e quale shell utilizza:

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

Ecco come appare la mia voce utente. Notare che dice / bin / zsh invece di / bin / bash. Per zsh, il file dot corretto è ~ / .zprofile. Il suo contenuto verrà eseguito ogni volta che accedi usando ssh.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.