SSH global $ PATH

1

Quando estou logado no meu servidor ArchLinux e digito:

$echo $PATH
I get...
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

Mas quando NÃO estou logado e tento:

ssh myyser@mysever 'echo $PATH'
i get..
/usr/bin:/bin:/usr/sbin:/sbin

O PATH está correto em meu / etc / profile, mas o ssh parece não carregar isso.

Existe alguma maneira de corrigi-lo para todas as sessões de usuários / ssh?

Isso não acontece quando eu uso o Ubuntu

Postando aqui como sugerido por Eugene Mayevski 'EldoS Corp

    
por Alexandre Bini 06.02.2011 / 18:14

4 respostas

1

Se você estiver usando o Bash como o shell padrão do usuário, o comando ssh iniciará um shell não-interativo não-login para que ele não processe /etc/profile . Você precisará fornecer esse arquivo em seu script.

    
por 06.02.2011 / 19:09
1

Quando você executa um comando via ssh , ele não inicia um shell de login no host remoto. As implicações práticas disso variam, mas normalmente isso significa que os arquivos de inicialização do shell que são executados no login serão ignorados. Por outro lado, os arquivos de inicialização do shell para cada instância do shell ainda serão processados.

Se você estiver usando bash , isso significa que apenas o arquivo .bashrc é usado. Eu costumo colocar algo assim no meu arquivo .bashrc :

if [ ! "$RAN_PROFILE" ]; then
  . $HOME/.profile
fi

E no final do meu .profile :

RAN_PROFILE=1
export RAN_PROFILE

Isso garante que eu receba .profile serviços mesmo para shells que não são de login.

    
por 06.02.2011 / 20:26
1

Eu corrigi este problema adicionando o caminho em / etc / environment

PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

Não sei se isso é uma boa prática, mas está funcionando.

Obrigado!

    
por 06.02.2011 / 20:35
0

O shell do seu cliente expande a variável PATH, então você precisa escapar do cifrão.

foo$ ssh [email protected] 'echo \$PATH'

    
por 06.02.2011 / 19:08