Entonces tengo un archivo de configuración ssh para mi usuario que Match exec
lo 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 -c
mientras 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 SHELL
variables 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 -c
o eliminar su Bashism (es decir, &>
redirección stdout-and-stderr).
Utiliza Match exec
algo 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 -c
más la línea de comando completa. No puedes cambiar esta parte.