~ / .profile não é carregado ao usar o SSH (Ubuntu)

17

Editado para refletir o problema que eu realmente queria resolver:

Eu preciso configurar meu ambiente Ruby para que eu possa implantar via Capistrano.

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

Eu coloco estes em ~ deploy / .profile, mas quando eu ssh, eles não estão sendo executados. Idéias?

Estou executando o Ubuntu 12.04.

A pergunta original era:

Quando eu ssh em outra conta no localhost, ele não carrega meu .profile. Como posso forçar o ssh a carregá-lo? Estou executando o Ubuntu 12.04.

    
por Charles R 12.03.2013 / 22:24

3 respostas

14

Você pode especificar explicitamente que deseja iniciar um shell de login interativo:

 ssh user@host bash --login -i 

A "função" de ~/.profile (ou ~. / bash_profile) e .bashrc para ssh tem alguns outros arquivos, (veja man ssh para detalhes):

~/.ssh/environment

Contains additional definitions for environment variables; see ENVIRONMENT, above.

~/.ssh/rc

Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started. See the sshd(8) manual page for more information.

    
por 12.03.2013 / 22:39
5

.profile é carregado apenas para shells de login, o que uma sessão ssh não é (por padrão). Se você quiser que algo seja executado na inicialização de todos os shells interativos, coloque-o em .bashrc (ou .zshrc ou o que seu shell usar).

Além disso, se você quiser apenas fazer login em outra conta na máquina local, o ssh provavelmente é um exagero. Você pode querer usar su ou algo assim.

    
por 12.03.2013 / 23:03
2

O uso do bash deve resultar na leitura de ~/.bashrc . O seguinte pode ajudar com ksh e sh (bash no modo sh), ou quando o seu ~/.bashrc não é executado durante o login.

O sshd consulta ~/.ssh/environment (verifique as permissões para sshd_config (5)) e ~/.ssh/sshrc ou ~/.ssh/rc . Isso dá a possibilidade de configurar ENV=~/.profile ou BASH_ENV=~/.profile e SSH_LOGIN=Y

Em ~/.profile tenho o seguinte layout (Substitua ENV por BASH_ENV ao usar o 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
    
por 21.04.2015 / 09:35