Problema
Cuando se ejecuta apt-get installen una sesión SSH no interactiva, la sesión nunca se cierra. Ejemplo:
ssh user@target "sudo apt-get -y install my_package"
Se my_packageinstala correctamente, pero la sesión SSH simplemente se abre.
Pregunta
¿Hay alguna bandera para pasar SSH para ir apt-geta trabajar?
Información Adicional
Contexto
La instalación remota se utiliza para la implementación automatizada de un paquete en un servidor de integración. Tan pronto como enviamos algunos cambios de código a un repositorio, un trabajo extrae el código, construye el paquete y lo implementa en la integración para verificar que todo funcione bien (en lo que respecta a la implementación).
Ya probado y notas
- La misma sesión de ejecución de SSH se
apt-get updatecierra limpiamente. Tenga en cuenta queapt-get updateno es interactivo, mientras queapt-get installes. Esto puede sugerir que la interactividad es un problema. - Un comando como
ssh user@target "sudo apt-get install my_package && echo Hello"nunca llega aecho. debconfse queja de que no puede encontrar una interfaz agradable (Display, Readline) y recurre a Teletype (aunque Readline está disponible).- En relación con la interfaz de debconf, pasar
-ta forzar TTY con SSH no ayuda. NingunoDEBIAN_FRONTEND=noninteractive. - Todo se hizo en Ubuntu 12_04 LTS.

ssh user@target, los comandos del shell) ¿funciona correctamente?Respuestas:
La siguiente respuesta en SF hizo el truco:
ssh no puede ejecutar el comando remoto cuando se ejecuta desde el script cron bash
La
-tbandera fuerza una asignación de pseudo-tty, excepto quizás cuando no hay TTY localmente. Pero pasar la bandera dos veces como en-t -tsolo pretende hacerlo. Y eso resolvió el problema.Consulte la documentación de SSH:
Ahora, ¿por qué funcionó eso? Resulta que
debconfya no se queja del frontend en los registros. Por lo tanto, creo que los-tconjuntos dobles (¿atrae?) Segúndebconfsea necesario, lo que permiteapt-get installcompletar la sesión SSH limpiamente.fuente
Mientras lo miraba, esto puede hacer el trabajo. Llamar a cualquier comando debe ser seguido por exit y heredoc. Encontré la solución, pero no la he probado personalmente.
La respuesta original viene de aquí: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
fuente
ssh user@host free -men mi entorno objetivo y funciona de maravilla. Voy a probar la recomendación a continuación.Bajo debian / jessie tuve éxito con este comando:
Pero quizás debería considerar usar ansible para esta y otras tareas futuras http://docs.ansible.com/ansible/apt_module.html
fuente