Variáveis exportadas dentro da sessão ssh estão vazias

2

Estou tentando exportar uma variável dentro de uma sessão ssh e fazer referência à variável no próximo comando de gravação.

sshpass -p "password" ssh -t -t my-box <<EOF
  export newUrl="this is a url"
  sudo -E sh -c 'echo "url=$newUrl" >> /path/to/file'
  exit
EOF

Em vez de imprimir,

url=this is a url

para o arquivo, ele apenas imprime,

url=

Por que o valor da variável não está acessível na mesma sessão ssh?

    
por Madhavan Kumar 19.12.2015 / 10:34

2 respostas

1

Como o documento here é indicado por <<EOF (sem nenhuma aspas), o conteúdo do documento here está sujeito à expansão de \$' . Por isso, $newUrl no documento here expande para o seu valor no shell local.

Para passar $newUrl ao shell remoto e fazer com que ele expanda a variável, você pode proteger a $ da expansão: \$newUrl em vez de $newUrl ou usar um literal aqui-document: <<'EOF' em vez de '' <

Você está expandindo a variável newUrl em uma string que será interpretada por um shell. Isso significa que o valor da variável será interpretado como um fragmento de script de shell, não como uma string. Se o valor contiver caracteres especiais de shell, haverá estragos. (Quais caracteres são problemáticos depende da solução que funciona na caixa nominal usada).

Em vez de usar muitas camadas de cotação e expansão, passe a URL como entrada para o comando executado como raiz. Então você não tem nada para se preocupar. Isso tem a vantagem adicional de funcionar mesmo se o sudo não estiver configurado para aceitar -E , o que é bastante comum. Você pode usar sudo sh -c 'cat >>/path/to/file' , ou melhor, para evitar possíveis problemas de cotação no arquivo, sudo tee -a /path/to/file .

sshpass -p "password" ssh -t -t my-box <<'EOF'
  newUrl="this is a url"
  printf '%s\n' "$newUrl" | sudo tee -a /path/to/file
EOF
    
por 20.12.2015 / 01:03
1

Tente exportar com o sudo. A variável é perdida quando você sudo para outro usuário. Você também pode definir Defaults env_keep += "newUrl" em seu arquivo sudoers no arquivo etc.

    
por 19.12.2015 / 10:45