Pregunta Cómo iniciar una fiesta interactiva con su


no tengo sudo su sobre un nombre de usuario, sin embargo, tengo su contraseña. Quiero tener un script que me pase la contraseña y me dé un golpe interactivo.

He intentado esto:

echo mypassword | su - otherusr
Password: Last login: Wed Jul 25 12:09:38 COT 2018
[myuser@myserver ~]$ 

Me devuelve a myuser y no tengo un bash interactivo con el otro usuario.

Lo intenté también:

echo mypassword | su -c "/bin/bash" - otherusr
echo mypassword | su -s "/bin/bash" - otherusr
echo mypassword | su -c "/bin/bash -i" - otherusr
Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.2$ exit

¿Cómo puedo hacer eso? Quiero crear un script que me devuelva una sesión interactiva de bash con otro usuario; no solo ejecutar un comando con otro usuario.


0


origen


Parece que estás trabajando en un shell súper limitado y no está conectando tu contraseña. Pruebe su y escriba la contraseña normalmente? Además, normalmente no debe utilizar este método para iniciar sesión, ya que su contraseña se registra en los registros bash. Eso suele ser una grave preocupación de seguridad. Si vas a usar este método, también podrías agregar nopasswd a sudoers - Chris
Por qué no su - otherusr y escribe la contraseña si vas interactivo de todos modos. Parece que ya estás en un caparazón. - Hogstrom


Respuestas:


Por defecto ninguno sudo ni su lee una contraseña de stdin. Intentan usar un dispositivo terminal directamente (algunas implementaciones incluso pueden quejarse cuando se usan en una tubería). Ahi esta sudo -S opción para cambiar este comportamiento, pero hasta donde sé, no hay una opción similar para su.

Solución: uso expect.

expect es un programa que "habla" a otros programas interactivos de acuerdo con un guión. Siguiendo el guion, expect sabe qué se puede esperar de un programa y cuál debería ser la respuesta correcta.

[...]

En general, expect es útil para ejecutar cualquier programa que requiera interacción entre el programa y el usuario. Todo lo que es necesario es que la interacción se pueda caracterizar programáticamente.

En tu caso, el script puede ser:

#!/usr/bin/expect 

log_user 0
spawn /bin/su - otherusr
expect "Password: "
send "mypassword\n"
interact

Aconsejo que este script sea accesible solo para ti (chmod go-rwx) Otros usuarios no deberían poder leerlo porque contiene mypassword en texto plano; no se les debe permitir ejecutarlo, porque da acceso a otherusrConcha.


0