Ejecute un script de shell como otro usuario que no tenga contraseña

Me gustaría ejecutar un script desde el shell principal de Ubuntu como un usuario diferente que no tiene contraseña.

Tengo privilegios completos de sudo, así que probé esto:

sudo su -c "Your command right here" -s /bin/sh otheruser

Luego tengo que ingresar mi contraseña, pero no estoy seguro de si ese script ahora se está ejecutando realmente con ese usuario.

¿Cómo puedo confirmar que el script realmente se está ejecutando bajo ese usuario ahora?

Puedes hacer eso con su o sudo, no hay necesidad de ambos.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Las partes pertinentes de man sudo:

-H   The -H (HOME) option requests that the security policy set     the HOME environment variable to the home directory of the     target user (root by default) as specified by the password     database.  Depending on the policy, this may be the default     behavior.
-u user     The -u (user) option causes sudo to run the specified      command as a user other than root.  To specify a uid      instead of a user name, use #uid.  When running commands as      a uid, many shells require that the '#' be escaped with a      backslash ('\').  Security policies may restrict uids to      those listed in the password database.  The sudoers policy      allows uids that are not in the password database as long      as the targetpw option is not set.  Other security policies      may not support this.

su solo puede cambiar de usuario sin proporcionar una contraseña si es root. Vea la respuesta de Caleb

Puede modificar el /etc/pam.d/su archivo para permitir su sin contraseña. Ver esto respuesta.

Si modificó el archivo de autenticación a lo siguiente, cualquier usuario que formara parte del grupo somegroup podría su a otheruser sin contraseña.

auth       sufficient pam_rootok.soauth       [success=ignore default=1] pam_succeed_if.so user = otheruserauth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Luego prueba desde la terminal

rubo77@local$ su otheruser -c 'echo "hello from $USER"'hello from otheruser

Si quieres usar su en lugar de sudo, creo que puedes usar algo como esto:

su - <username> -c "<commands>"
  • - simulará un inicio de sesión del usuario especificado
  • -c le indica que desea ejecutar un comando

ps. Desafortunadamente, no puedo instalar ruby usando rvm con este método, pero probablemente no esté relacionado.

Las respuestas anteriores son realmente útiles para mí, pero para responder a la pregunta real...

¿Cómo puedo afirmar que el script realmente se está ejecutando bajo ese usuario ahora?-

Utilizar:

ps -ef | grep <command-name>

La salida debe incluir su script y el usuario real que lo ejecuta.Las personas en sistemas similares a BSD, por ejemplo, MAC, pueden encontrar información similar con:

ps aux | grep <command-name>

Asegúrese de cambiar al usuario root con el comando sudo su y luego usa el comando

su user -s <command>

Por ejemplo: su www-data -s bin/magento cache:clean

Tuve el mismo problema.Simplemente escriba el comando screen -dmS testscreen esto creará una pantalla separada en su cuenta de usuario que no sea sudo y luego podrá iniciar sesión y verificar si esta pantalla está allí al screen -ls.

Puedes usar sudo para hacer esto. En primer lugar, es necesario modificar el /etc/sudoers archivo para agregar una regla que permita hudson usuario para convertirse en el otro usuario del script en cuestión. Supongamos que tiene un user1 cuenta que necesita ejecutarse /usr/local/bin/my_script.sh.

Ejecutar visudo para modificar el sudoers file.A continuación, utilice lo siguiente sudo comando para ejecutar el script desde hudson.

Es muy importante que uses visudo para modificar el sudoers archivo para verificar si hay errores en el archivo antes de colocarlo en su lugar. Además, sugeriría una lectura rápida man sudoers para comprender claramente lo que hace lo anterior antes de agregarlo a su configuración.

Utilizo & quot; ssh & quot; apuntando a la misma máquina local.Esto me permite ejecutar el script de shell o el comando sin contraseña.

ssh target-user@localhost script-to-execute

Primero, me aseguro de que el usuario host haya guardado su clave pública para el usuario objetivo (en la misma máquina).Luego ejecuto el comando ssh que mostré arriba.

El resultado es un comando / script que se ejecuta como el usuario de destino, sin siquiera ingresar una contraseña.

sudo-u & lt; usuario> & lt; comando>