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.
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
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.
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.
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!
O shell do seu cliente expande a variável PATH, então você precisa escapar do cifrão.
foo$ ssh [email protected] 'echo \$PATH'