No he podido encontrar una pregunta que describa este escenario específico.
Estoy tratando de ejecutar un script bash muy básico para recuperar el registro de varias máquinas. Estoy ejecutando el script localmente pero necesito acceder a una máquina externa a través de ssh, así como sudo en un usuario privilegiado una vez en esa máquina ...
ssh myuser@machine.net
sudo su - privledged_user
cat logs > file.txt
Ejecutar esto con sh -x revela que bash se está atascando en la línea 'ssh'. Así que traté de revisar esto:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
Esto también parece detenerse indefinidamente. ¿Hay una mejor solución para este problema? No puedo evitar usar sudo su por lo que puedo decir ...
¡Gracias por cualquier ayuda!
Respuestas:
La forma en que lo logro en mi entorno actual es ejecutar ssh con el
-t
indicador que fuerza la asignación de tty, y luego ejecutar sudo -u root dentro de él, de la siguiente manera:Tengo mi cuenta en sudoers en el lado remoto, por lo que no se requiere contraseña.
Este ejemplo muestra diferentes formas de hacerlo dentro de una sola sesión ssh, incluida la ejecución de múltiples comandos con bash o dentro de una subshell. Tenga en cuenta también que si coloca el código anterior en un script ejecutable, puede pasar argumentos de línea de comando ($ 1 y $ 2) a ssh y estos se expandirán y luego se referenciarán en el lado remoto.
fuente
Si no quiere o no puede evitar que sudo le pida la contraseña, un simple truco es leerla localmente y almacenarla en una variable local:
fuente
Si sudo está configurado para permitir comandos sin contraseña, esto debería hacer lo que desee:
o
dependiendo de si desea que el
file.txt
archivo se cree de forma local o remota.De lo contrario, aquí hay una manera de pasar la contraseña del usuario remoto a
sudo
:fuente