Não é possível obter a variável de perfil usando ssh

2

Não é possível recuperar a variável de perfil usando ssh.

server2 == > usuário apptst == > O perfil do bash tem a variável $ APPHOME.

Estava tentando recuperar o valor do server1 usando ssh, mas falhou.

Opções usadas abaixo

server1> ssh apptst@server2 'echo $APPHOME'

server1> ssh apptst@server2 echo '$APPHOME'

server1> ssh apptst@server2 echo "$APPHOME"

server1> ssh apptst@server2 "echo $APPHOME"

quando tentado

server1> ssh apptst@server2 ls -ld $APPHOME

funciona bem.

Alguma sugestão do que está faltando e como posso obter a variável do servidor2?

    
por KumarJohn 15.03.2013 / 14:14

2 respostas

4

Este comando deve funcionar:

 server1> ssh apptst@server2 'bash -l -c "echo \$APPHOME"'
  • você precisa de ' quotes para passar o comando complete para ssh como um argumento; isso também impede que o shell no server1 expanda $APPHOME
  • bash -l inicia um shell de login, que lê nos arquivos de perfis, onde $ APPHOME é definido (como @chepner apontou em sua resposta, isso não é padrão quando invocado pelo sshd)
  • -c executa o próximo argumento, novamente com aspas que o comando echo completo é executado.
  • escapando \$ é necessário, porque senão o shell pai (não-login) que o sshd invoca (e que herda o ambiente diretamente do init (*)) expande $APPHOME . Mas isso é muito cedo, pois $APPHOME só é definido para shells login (via ~/.profile ). [<> adicionou este ponto após comentário do OP ]

(*) me corrijam, se eu estiver errado aqui.

    
por 15.03.2013 / 14:29
3

O problema é que quando você especifica um comando exato para executar via ssh , o controle remoto sshd não não inicia um shell de login para executá-lo, mas um shell não interativo regular. Nesse caso, .bash_profile não é executado e, portanto, APPHOME não está definido.

E durante a digitação, o mph postou a solução correta para forçar um shell de login processa .bash_profile .

    
por 15.03.2013 / 14:31