~ / .profile non viene caricato quando si utilizza SSH (Ubuntu)


22

Modificato per riflettere il problema che volevo davvero risolvere:

Devo configurare il mio ambiente ruby ​​in modo da poterlo implementare tramite Capistrano.

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

Li metto in ~ deploy / .profile, ma quando lo inserisco, non vengono eseguiti. Idee?

Sto eseguendo Ubuntu 12.04.


La domanda originale era:

Quando inserisco un altro account su localhost, non carica il mio .profile. Come posso forzare ssh a caricarlo? Sto eseguendo Ubuntu 12.04.

Risposte:


15

È possibile specificare esplicitamente che si desidera avviare una shell di accesso interattiva:

 ssh user@host bash --login -i 

Il "ruolo" di ~/.profile(o ~. / Bash_profile) e .bashrcper ssh ha alcuni altri file, (vedi man sshper i dettagli):

~ / .Ssh / ambiente

Contiene definizioni aggiuntive per le variabili di ambiente; vedi AMBIENTE, sopra.

~ / .Ssh / rc

I comandi in questo file vengono eseguiti da ssh quando l'utente accede, subito prima dell'avvio della shell (o del comando) dell'utente. Vedere la pagina man di sshd (8) per maggiori informazioni.


"È possibile" spesso non è vero, perché ssh viene eseguito da qualche altro strumento (consegna continua) e il comando non può essere facilmente modificato.
Jan Hudec,

6

.profileviene caricato solo per le shell di login, che non è una sessione ssh (per impostazione predefinita). Se vuoi eseguire qualcosa all'avvio per tutte le shell interattive, inseriscilo .bashrcinvece ( .zshrco qualunque cosa usi la tua shell).

Inoltre, se si desidera semplicemente accedere a un altro account sul computer locale, ssh è probabilmente eccessivo. Potresti voler usare suo qualcosa invece.


3
Sembra .bashrcnon sia caricato neanche.
Kenorb,

Questo non è corretto Si tratta di una shell di login. Dalla pagina man: "Se viene specificato un comando, viene eseguito sull'host remoto invece che su una shell di login."
MK


Quando ssh riceve un comando da eseguire, per impostazione predefinita non alloca un tty e quindi anche la shell non è “interattiva”.
Jan Hudec,

4

L'uso di bash dovrebbe comportare la lettura ~/.bashrc. Quanto segue potrebbe aiutare con ksh e sh (bash in modalità sh), o quando il tuo ~/.bashrcnon viene eseguito durante il login.

Il sshd consulta ~/.ssh/environment(controlla sshd_config (5) per le autorizzazioni) e ~/.ssh/sshrco ~/.ssh/rc. Questo dà la possibilità di impostare ENV=~/.profileo BASH_ENV=~/.profileeSSH_LOGIN=Y

In ~/.profileHo il seguente layout (Sostituisci ENVcon BASH_ENVquando usi bash):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

Bash legge ~/.profilesolo quando è una shell di accesso e ~/.bash.bashrcsolo se ha un terminale, nessuna delle quali è vera per impostazione predefinita quando si richiama un comando con ssh. Tuttavia, ci sono molte altre opzioni per impostare l'ambiente, sul server, tutto purtroppo a seconda della configurazione del sistema:

  • Zsh legge ~/.zshenvanche in questo caso; tuttavia non esiste un file di configurazione corrispondente per bash.
  • Se l' PermitUserEnvironmentopzione è attiva in /etc/sshd_config, ssh leggerà ~/.ssh/environment. Purtroppo questa opzione è disattivata per impostazione predefinita.
  • Se pam_env.soviene chiamato con user_readenv=1in /etc/pam.d/sshd, leggerà ~/.pam_environment. Anche se non è il modulo predefinito, viene chiamato in questo modo almeno in Ubuntu .
  • Se tutto il resto fallisce, è possibile inserire una command=direttiva nel file delle chiavi autorizzato chiamando uno script wrapper che imposta l'ambiente ed esegue $SSH_ORIGINAL_COMMANDalla fine (I il comando è uno per la shell, quindi eval è appropriato qui, ma non sono sicuro) .

0

Probabilmente hai un ~/.bash_profile, che ha la precedenza ~/.profile.

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.