Eu tenho um comando que roda bem se eu ssh em uma máquina e a executo, mas falha quando tento executá-la usando um comando ssh remoto como:
ssh user@IP <command>
Comparando a saída de "env" usando os dois métodos, resutls em diferentes ambientes. Quando efetuo login manualmente na máquina e executo env, recebo muito mais variáveis de ambiente do que quando executo:
ssh user@IP "env"
Alguma idéia do porquê?
ssh
environment-variables
Tom Feiner
fonte
fonte
bash
não é uma linguagem de script?Respostas:
Existem diferentes tipos de conchas. O shell de execução do comando SSH é um shell não interativo, enquanto o seu shell normal é um shell de logon ou um shell interativo. Descrição a seguir, do man bash:
fonte
ssh user@host "bash --login -c 'command arg1 ...'"
fará com que o shell remoto configure o ambiente de login. A seção que você citou menciona,--login
mas seria fácil ignorar isso.ssh <ssh options> <IP> bash --login my_script.sh
executar um script na máquina remota, trabalha um tratamento e me permitiu usar com êxito ambientes locais comoJAVA_HOME
Que tal obter o perfil antes de executar o comando?
ssh user@host "source /etc/profile; /path/script.sh"
Você pode achar que é melhor para mudar isso para
~/.bash_profile
,~/.bashrc
ou o que quer.(Como aqui (linuxquestions.org) )
fonte
O ambiente do shell não carrega ao executar o comando ssh remoto. Você pode editar o arquivo de ambiente ssh:
Seu formato é:
Além disso, verifique a
sshd
configuração para aPermitUserEnvironment=yes
opção.fonte
Eu tive um problema semelhante, mas no final descobri que ~ / .bashrc era tudo que eu precisava.
No entanto, no Ubuntu, tive que comentar a linha que para de processar ~ / .bashrc:
fonte
/etc/bash.bashrc
.Encontrei uma solução fácil para esse problema: adicionar código-fonte / etc / profile à parte superior do arquivo script.sh que eu estava tentando executar no sistema de destino. Nos sistemas aqui, isso fez com que as variáveis ambientais necessárias ao script.sh fossem configuradas como se estivessem sendo executadas a partir de um shell de login.
Em uma das respostas anteriores, sugeriu-se que ~ / .bashr_profile etc ... fosse usado. Não gastei muito tempo com isso, mas o problema é que se você fizer um shsh para um usuário diferente no sistema de destino do que o shell no sistema de origem no qual você efetua login, me pareceu que isso causa o usuário do sistema de origem nome a ser usado para o ~.
fonte
Apenas exporte as variáveis de ambiente que você deseja acima da verificação para um shell não interativo em ~ / .bashrc.
fonte