Pasar una variable env a través de ssh

Pasar una variable env a través de ssh

Estoy intentando pasar una variable env a un host remoto usando el siguiente código.

ssh username@ip "env current_quarter=$current_quarter" sh -s << 'EOF' 
pwd 
echo "${current_quarter}" 
EOF

pwdimprime la ubicación correcta en el host remoto pero echo "${current_quarter}"no imprime el trimestre_actual.

Respuesta1

Al poner EOFcomillas, le está indicando al shell local que no expanda el documento aquí antes de pasarlo a ssh. De acuerdo con ladocumentación de bashesto se aplica a la expansión de parámetros, la sustitución de comandos y la expansión aritmética.

Al contrario de lo que pensé cuando escribí originalmente esta respuesta, el shell remoto no se ve afectado por esto y ejecutará el documento aquí como lo escribió directamente en el shell remoto (incluidos todos los tipos de expansión y sustitución que se omitieron en el shell local por citando EOF).

Si solo desea utilizar la variable local, testelimine las comillas del EOF:

ssh user@host sh -s <<EOF
pwd
echo $test
EOF

Para los usuarios de pescado, se vería así:

ssh user@host "\
pwd
echo $test
"

Ahora, si desea pasar la variable local testcomo variable remota remote_testy no expandirla localmente, simplemente escape la variable con una barra invertida:

ssh user@host sh -s <<EOF
export remote_test=$test
pwd
echo "\${remote_test}"
EOF

Editar:

Correr:

ssh user@host "env remote_test=$test" sh -s <<'EOF'
pwd
echo "${remote_test}"
EOF

debería ser equivalente al tercer ejemplo de código con la excepción de que envno forma parte del shell y también se puede utilizar en shells que no sean bourne.

(Sin embargo, esto es idéntico al ejemplo de código que dio OP, pero dado que OP marcó esta respuesta como correcta, sospecho que env y export se comportan de manera diferente cuando encuentran ciertas secuencias de caracteres, pero no he encontrado evidencia concluyente que respalde esta hipótesis).

información relacionada