Omitir shell para comandos en ssh config (~/.ssh/config)

Omitir shell para comandos en ssh config (~/.ssh/config)

Entonces tengo un archivo de configuración ssh para mi usuario que Match execlo está usando para obtener algunas coincidencias en IP:

Match exec "echo %h | grepcidr 192.168.12.0/20  &>/dev/null "
  User         ubuntu
  ProxyCommand          ssh my-bastion -W %h:%
  IdentityFile          ~/.ssh/target.pem

Esto funciona bien en mi host, pero intenté ejecutarlo en un contenedor donde tengo instalado openssh-client, sin embargo, la conexión ssh falla porque considera que el comando tuvo éxito (incluso cuando no estoy apuntando a la red) , por lo que intentará atravesar el bastión.

debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 0

En mi host regresa

debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 1

¿Cuál debería ser lo que devuelve el comando ssh de los contenedores?

He estado investigando y resulta que el comando ssh en el contenedor se inicia usando, sh -cmientras que el comando ssh iniciado en mi host es. bash -c Puedo confirmar que esta es la causa, probando tanto en la línea de comando como comprobando el retorno del comando conecho $?

¿Hay alguna forma de especificar que el comando ssh solo se use bash?

Puedo anular las SHELLvariables de entorno al principio de la línea de comando

SHELL=/bin/bash ssh [email protected]

Pero mi objetivo es usar ansible detrás de todo eso, por lo que me gustaría anular el shell para todo SSH.

Respuesta1

Puede especificar un comando alternativo que comience con bash -co eliminar su Bashism (es decir, &>redirección stdout-and-stderr).

Utiliza Match execalgo así como la system()función C, por lo que depende del sistema de ejecución (biblioteca C) decidir qué shell proporciona. En la mayoría de los sistemas Unix se traduce en sh -cmás la línea de comando completa. No puedes cambiar esta parte.

información relacionada