Tengo algunos conmutadores HP en los que inicio sesión a través de ssh. Los interruptores envían un comando de terminal para deshabilitar el ajuste de línea ("rmam" en terminfo parlance), pero luego no pueden volver a habilitarlo, lo que arruina mi terminal después de salir de la sesión ssh. Puedo arreglar la terminal ejecutando tput smam
.
¿Hay alguna forma de hacer que ssh ejecute automáticamente ese comando después de que finalice mi sesión de ssh?
No me mataría ejecutarlo como un ssh
comando automático de shell, o un alias para ejecutar siempre ese comando después, pero preferiría resolver el problema a través de ssh para poder limitar el comando para que se ejecute después de conectarme a anfitriones malos.
Mi cliente ssh es OpenSSH_6.2p2, pero puedo cambiar o actualizar si hay una nueva característica en alguna parte.
ssh 1.2.3.4 && tput smam
Respuestas:
OpenSSH tiene una opción llamada
LocalCommand
que ejecuta un comando en el lado del cliente cuando realiza una conexión ssh. Desafortunadamente, ejecuta el comando antes de que se establezca la sesión ssh, no después. Pero eso me dio la idea de que de alguna manera podría lograr que el proceso anterior espere a que termine la sesión ssh. A pesar de que el proceso ssh es el PID principal del LocalCommand, resulta que todavía no es tan fácil.Sin embargo, encontré algo que funciona para mí en MacOS X, y debería funcionar en (otros) BSD, si no en Linux. Escribí un pequeño programa en C que usa la
kqueue()
interfaz para esperar en su propio ppid y luego ejecuta un comando provisto una vez que el proceso finaliza. (Código fuente a continuación, para aquellos que estén interesados).Ahora solo tengo que hacer referencia a este programa en mi
~/.ssh/config
archivo:Y esto parece funcionar bien. Aquellos de ustedes en Linux ... Supongo que pueden probar el mismo tipo de sondeo buscando
LocalCommand
el ppid y esperando que ese pid no se reutilice. (Ver /programming/1157700/how-to-wait-for-exit-of-non-children-processes )wait4parent.c:
fuente
Podría hacer un contenedor ssh simple para esto y en él especificar los comandos que se ejecutarán después de ssh, por ejemplo
fuente
eval
eso. Desecha el beneficio de la doble cita$@
.