EDITAR Dic 2013: Aquí hay una respuesta corta: tomar un día o dos para familiarizarse con la biblioteca de Python "Fabric". Fabric soluciona una tonelada de problemas con respecto al envío de tareas remotas a 1 o más servidores.
Probablemente aún desee configurar un nombre de usuario en el sistema de destino que pueda ejecutar comandos sin contraseña (¡y también puede usar Fabric para hacer eso!).
Solo tenga en cuenta que algunos aspectos de Fabric no son perfectamente Pythonic. Además, Fabric se diseñó primero con los administradores de sistemas en mente, personas que quieren agrupar comandos contra servidores. Si intenta hacer algo más (como automatizar algunos servidores o escenarios muy específicos), querrá comprender completamente cómo funciona "con la configuración" y/o el decorador @roles. No miré hacia atrás ...
(Y sí, recibí comandos SSH remotos que funcionan en sistemas "remotos". Es decir, el servidor A solicita al servidor B que se conecte al servidor C, y el retorno del comando es visto en el servidor A a pesar de que A no habla directamente con el servidor C. ¡Hace que la configuración del laboratorio sea más fácil!).
Respuesta original: Hay MUCHAS soluciones a este problema. Caballos de carreras; algunos son mejores que otros en diferentes situaciones.
La pregunta es cómo resolver el error "sin TTY". Ese parece ser el enfoque así que asumo que la conversación sobre sudoers es solo un intento de solución para evitar el problema de TTY.
Opción 1) La respuesta de Askhat funciona muy bien ... la mayoría de las veces. En realidad, siempre especifique "-tt" que funciona en más sistemas de destino.
Tenga en cuenta que seguirá teniendo problemas si está utilizando una biblioteca SSH como Paramiko, que no tiene una forma intuitiva de hacer "-t".
Opción 2) Mi respuesta es especificar un ASKPASS que es STDIN.Este ejemplo satisface tanto el requisito de contraseña de sudo como el TTY: $ shell> ssh [email protected] 'echo "contraseña" | sudo -S echo "foobar"'
Opción 3) Sí, puede desactivar sudo las contraseñas de todos o algunos usuarios, pero eso no es bueno en un servidor de producción.
Opción 4) Puede remota "requiretty" (o conjunto "! Requiretty" para todos o algunos usuarios en sudoers. Una vez más, no se enfríe en un cuadro de producción.
Es mejor evitar hacer cambios en el servidor. Algún día ese servidor será reemplazado, la configuración volverá a los valores predeterminados y su script dejará de funcionar.
Tenga en cuenta que una vez que comprende todas sus opciones, abre las puertas a mucha más automatización (por ejemplo, un script en su portátil que puede conectarse a una lista de nombres de host del servidor, y realizar tareas de sudo en esos servidores sin la necesidad de copiar dichos scripts en esos servidores).
... y el camino difícil? –
@ bradley.ayers: El problema es que 'sudo' quiere leer una contraseña de un tty. O bien proporciona un tty para sudo o evita la verificación de contraseña en sudo. Esto último es más difícil si quiere obtener seguridad. – nosid
@nosid Gracias por esto. –