Tengo un script de shell interactivo, que en un lugar necesita ssh a otra máquina (basado en Ubuntu) y ejecutar algo como root (el usuario debe ingresar su contraseña, pero el comando remoto debe ejecutarse como se indica en el script):
# ...
ssh remote-machine 'sudo ls'
# ...
Sin embargo, siempre recibo este mensaje de error:
sudo: no tty present and no askpass program specified
OK, eso está bastante claro. Pero, ¿cómo puedo evitar esto? Algo como esto debería suceder:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
la salida contendrá \ r \ n terminaciones, por ejemplo.ls | cat
hará - verá que stdout es una tubería. En esta pregunta específica, eso no es relevante, ya que aparentemente está destinado a ejecutarse de forma interactiva desde un terminal, por lo que probablemente desee las columnas y los colores y otras cosas.Este método ejecutará un solo script usando sudo después de ssh:
Supongamos que tenemos un usuario "remoto" con capacidades de sudo y que tenemos un script que queremos que se ejecute como root.
1) Configure un script en / etc / passwd para usarlo al iniciar sesión:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) Dentro de "login.sh", ejecutamos el script que queremos ejecutar como "sudo":
Normalmente pedirá la contraseña dos veces: ssh login + sudo. Si desea ingresarlo solo una vez, intente sudo sin contraseña (no recomendado). <- por favor lea el comentario de Boldewyn.
La principal ventaja es que "ssh" no requiere ningún otro parámetro (como -t), y sudo es forzado en el lado del servidor. Además, una vez que se cierra el script, el usuario también cierra sesión.
Puede que no sea tan elegante, pero es simple y funciona.
fuente
sudoers
archivo en un servidor como este es una catástrofe a la espera de suceder. Si alguien obtiene acceso como usuario (por ejemplo, a través del servidor web), puede convertirse inmediatamente en root. Gracias, pero estaba buscando soluciones que no pongan en conflicto la configuración de mi servidor. Si tuviera una solución, que de alguna manera reutilice mágicamente la autenticación de SSH para elsudo
comando, estaría más interesado (y tal vez comenzaría a buscar reemplazos para SSH ...).Puede ejecutar el siguiente comando para obtener acceso de root sin interactividad:
fuente