Dove è solitamente impostato $ BASH_ENV?


19

Ho due server Linux che dovrebbero essere configurati in modo identico, tuttavia i comandi ssh a uno di essi non riescono per i comandi che richiedono un percorso specificato in ~ / .bashrc. Ad esempio, posso usare un comando come pwdinterattivamente e tramite ssh, ma se provo a eseguire un programma che si trova in una cartella bin dell'applicazione, funziona solo in una shell interattiva per uno dei server.

Il file / etc / profile e / etc / environment su entrambi i server sono identici, tuttavia $ BASH_ENV è impostato su ~ / .bashrc sul server che funziona correttamente. Voglio impostare $ BASH_ENV sul server che non funziona, ma preferirei impostarlo nella stessa posizione in cui è impostato nel server funzionante. Quali sono i luoghi in cui Linux verrà eseguito al momento di un accesso non interattivo, come un comando ssh da un altro computer?

modifica: la riga in / etc / passwd per l'utente specifica / bin / bash su entrambi i server. Il file ~ / .bash_profile per entrambi i server è identico e contiene if [ -f ~/.bashrc ]; then . ~/.bashrc; fi. L'unica differenza tra i sistemi è che $ BASH_ENV è una stringa nulla sul server che non funziona e non riesco a trovare dove è stato impostato nel server che funziona.

modifica 2: il file ~ / .ssh / environment su entrambi i server ha BASH_ENV = ~ / .bashrc


1
/ Etc / passwd è identico su entrambi i server? Se bash è chiamato come "/ bin / sh" invece di "/ bin / bash" non leggerà alcun file bashrc (solo file di profilo).
Freiheit,

Non identico, ma l'utente che sto inviando comandi ha la stessa riga in / etc / passwd su entrambi i sistemi.
Basil

E che dire di ~ / .profile e ~ / .bash_profile?
Freiheit,

sono identici ed entrambi contengonoif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Basil

Hai verificato che / etc / bashrc e /etc/profile.d/* sono identici? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
Freiheit,

Risposte:


21

BASH_ENVverrà impostato solo tramite l'ambiente o un altro script proveniente durante l'inizializzazione. Per una shell non interattiva, proverà a generare file aggiuntivi solo se quella shell è anche una shell di accesso. (nel qual caso leggerà ~/.bash_profile, ~/.bash_logine ~/.profile... ma se lo facesse, non avresti riscontrato un problema)

Il primo posto dove cercare è l'ambiente in cui viene invocata la subshell.

  • Viene BASH_ENVpassata una variabile esportata . Tieni presente che questo può essere sepolto in un file di origine.
  • Può essere inserito come parametro sulla stessa riga che chiama lo script, ad es BASH_ENV=blah /path/to/somecommand.sh. Questo si distingue come un pollice dolorante quindi probabilmente lo avresti preso.

Se viene impostato dopo aver effettuato l'accesso ma non riesci a capire dove, potrebbe essere necessario esaminare ciò che è responsabile della costruzione dell'ambiente di accesso.

  • Tutti i soliti file che provengono da una shell di accesso. man bashper l'elenco completo.

  • PAM : come suggerito da Freiheit nei commenti, controlla /etc/security/pam_env.confe tutti i file aggiuntivi a cui fa riferimento pam_env.so. Anche altri moduli PAM potrebbero essere responsabili, ma se le tue configurazioni PAM sembrano identiche, probabilmente non è così.

  • sshd : scansionerà i seguenti file, in ordine:

    • ~/.ssh/environment(prima di passare alla home directory; solo se PermitUserEnvironmentè abilitato in sshd_config)
    • ~/.ssh/rc (dopo essere passati alla home directory; sempre)
    • /etc/ssh/sshrc(se ~/.ssh/rcnon è presente)

Nota: sshdcercherà anche le environment=valuelinee nel file delle chiavi autorizzate dell'utente (se PermitUserEnvironmentabilitato), ma non è chiaro dalla pagina man dove quel passo rientra nella sequenza sopra.


Ho trovato la differenza! PermitUserEnvironment yesè impostato in / etc / ssh / sshd_config sul server funzionante, ma non su quello problematico. L'ho cambiato, ma ho appena testato un comando e non ha funzionato di nuovo. Questo file viene analizzato ogni volta che provo ad accedere a ssh? Non ho un ~ / .ssh / rc per l'utente a cui sto lavorando, e non c'è nessun file / etc / ssh / sshrc su nessuno dei due sistemi.
Basil

Oh, penso di dover reinizializzare ssh? /etc/init.d/sshd?
Basil

@Basil Sì, è necessario riavviare sshd. Significa anche che potrebbe esserci un file sul server funzionante (controlla l'elenco di quelli che ti ho dato sshd) che sta impostando l'ambiente.
Andrew B,

Sì, quella è stata la parte frustrante - tutto ciò di cui ho bisogno è impostato in .bashrc, che non era in esecuzione :) Grazie mille per il tuo aiuto - Sto programmando una modifica per reinizializzare SSH e riporterò indietro. Presumo che funzionerà.
Basil

Ho appena finito di reinizializzare SSH e i miei comandi SSH non interattivi ora funzionano! Grazie mille per il tuo aiuto, non avrei mai trovato quel campo da solo.
Basil
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.