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

2

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

server2 == & gt; usuário apptst == & gt; O perfil 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 tentei

server1> ssh apptst@server2 ls -ld $APPHOME

Funciona bem.

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

KumarJohn
fonte
No segundo caso, o shell em servidor1 expande $APPHOMEe não server2. Verifique por exemplo com cd / && ssh apptst@server2 'echo $PWD' (você precisa dessas citações ', caso contrário, novamente shell no server1 irá expandir), que retornará / e não ~.
mpy
Oi Obrigado pela explicação. Mas todos os casos falharam em fornecer a saída. confuso completamente que erro estou fazendo.
KumarJohn

Respostas:

4

Este comando deve funcionar:

 server1> ssh apptst@server2 'bash -l -c "echo \$APPHOME"'
  • você precisa ' aspas para passar esse comando completo para ssh como um argumento; isso também impede que o shell no server1 se expanda $APPHOME em si
  • 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) qual sshd chama (e que herda o ambiente diretamente do init (*)) expande $APPHOME. Mas isso é cedo demais $APPHOME só fica definido para entrar conchas (via ~/.profile ). [ adicionou este ponto após comentário do OP ]

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

mpy
fonte
Oi Obrigado pela resposta ... Eu tentei como sugerido, mas ainda estou recebendo apenas uma saída em branco.
KumarJohn
1
@ user2119462: Isso se torna muito estranho, acho que posso reproduzir seu problema agora. Tente esta solução realmente feia: ssh apptst@server2 'bash -l -c "set | grep ^APPHOME"'
mpy
@mpy ... obrigado pela solução que funcionou bem. Mas ainda não conseguia entender porque a primeira solução não está funcionando
KumarJohn
@ user2119462 Você tentou a resposta melhorada? Estou realmente interessado se isso funcionar agora também!
mpy
1
@mpy ... a resposta melhorada funcionou. Muito obrigado
KumarJohn
3

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

E enquanto digita isso, mph postou o solução correta forçar um shell de login que processa .bash_profile.

chepner
fonte
Obrigado Chepner ..... mas não há saída. Eu tentei atribuí-lo a uma variável, mas ainda estava tendo o mesmo problema, a saída em branco.
KumarJohn