Como evitar a citação e o escape necessários ao passar comandos e variáveis locais para o ssh com o sudo?

0

Como evitar a citação e o escape necessários ao passar comandos e variáveis locais para o ssh com o sudo?

Encontrou alguém que fornece uma maneira criativa de evitar citações usando documentos aqui. Parecia uma ótima idéia, mas não funcionou para mim no bash. Aqui está o conselho que encontrei: Citando em construções de tipo ssh $ host $ FOO e ssh $ host" sudo su usuário -c $ FOO "

    
por dabest1 07.02.2018 / 10:30

1 resposta

0

Aqui está um exemplo básico de script.

# Assign values to variables locally.
myvar1="myvalue1"
myvar2="myvalue2"
# Add your local commands here.

ssh myremotehost "$(
cat <<HEREDOC_EXPORT_VARIABLES
export myvar1="$myvar1"
export myvar2="$myvar2"
HEREDOC_EXPORT_VARIABLES

cat <<'HEREDOC_SUDO'
sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'

# Optionally display your variables.
echo "myvar1: $myvar1"
echo "myvar2: $myvar2"
# Add your remote commands here.

HEREDOC_COMMANDS
HEREDOC_SUDO
)" | tee logfile.log

Explicação de diferentes partes.

Variáveis atribuídas a valores localmente (antes de executar comandos na máquina remota):

myvar1="myvalue1"
myvar2="myvalue2"

"$( ... )" permite agrupar vários comandos e permitir o uso de aspas duplas nesse bloco.

Exportar bloco aqui-documento, que não está entre aspas simples, permite usar variáveis locais no bloco:

cat <<HEREDOC_EXPORT_VARIABLES
...
...
HEREDOC_EXPORT_VARIABLES

Exportação de variáveis locais para estar disponível para comandos remotos.

export myvar1="$myvar1"
export myvar2="$myvar2"

Bloco Outer here-document, que está entre aspas simples, para excluir o comando sudo e remover a necessidade de escape de variáveis remotas para o documento interno interno (potencialmente pode ser substituído por echo sem o avanço de linha):

cat <<'HEREDOC_SUDO'
...
...
HEREDOC_SUDO

Bloco Inner here-document, que está entre aspas simples, para remover a necessidade de escape de variáveis remotas.

sudo -Eu root /bin/bash <<'HEREDOC_COMMANDS'
...
...
HEREDOC_COMMANDS
A opção

-E em sudo permite preservar as variáveis de ambiente, que foram exportadas anteriormente.

tee logfile.log permite a saída de eco para o terminal e para um arquivo de log ao mesmo tempo.

Como bônus, você pode substituir ssh myremotehost "$( line por echo "$( e obter uma saída de como será sua parte executada remotamente para fins de depuração.

Dica: você pode precisar escapar de uma citação simples ou dupla não pareada dentro de "$( ... )" block, mesmo que você a use em um comentário.

    
por 07.02.2018 / 10:30

Tags