Saltar al contenido

PuTTY scripting para iniciar sesión en el host

Posterior a consultar especialistas en el tema, programadores de deferentes áreas y profesores hemos dado con la respuesta al dilema y la plasmamos en esta publicación.

Solución:

Resolví esto con la ayuda de un amigo. los -m La opción PuTTY finalizará su sesión inmediatamente después de ejecutar el archivo de shell. Lo que hice en su lugar es crear un script por lotes llamado putty.bat con estos contenidos en mi máquina Windows:

@echo off
putty -load "host" -l username -pw password

Esto me conecta de forma remota al host de Linux. En el lado del host, creé un archivo de shell llamado sql con estos contenidos:

#!/bin/tcsh

add oracle10g
sqlplus username password

Se usa la compilación de Linux de mi host tcsh. Otras compilaciones de Linux podrían usar bashasí que simplemente reemplace tcsh con bash y debería estar bien.

Para resumir, la automatización de estos pasos ahora se realiza en dos sencillos pasos:

  1. Haga doble clic putty.bat. Esto abre PuTTY y me registra en el host.
  2. Ejecutar comando tcsh sql. Esto agrega la herramienta Oracle a mi host y me registra en la base de datos sql.

No estoy seguro de por qué las respuestas anteriores no sugirieron que el póster original configurara un perfil de shell (bashrc, .tcshrc, etc.) que ejecutara sus comandos automáticamente cada vez que iniciaran sesión en el lado del servidor.

La búsqueda que me llevó a esta página en busca de ayuda fue un poco diferente: quería varios accesos directos de PuTTY para el mismo host que ejecutarían diferentes comandos de inicio.

Se me ocurrieron dos soluciones, las cuales funcionaron:

(fondo) Tengo una carpeta con una variedad de accesos directos de PuTTY, cada uno con la propiedad “objetivo” en la pestaña de acceso directo que se parece a:

"C:Program Files (x86)PuTTYputty.exe" -load host01

con cada carga correspondiente a un perfil de PuTTY que había guardado (con diferentes hosts en la pestaña “Sesión”). (En su mayoría, solo difieren en los esquemas de color; me gusta que cada grupo de tareas relacionadas comparta un esquema de color en la ventana del terminal, con tareas críticas, como iniciar sesión como root en un sistema de producción, realizadas solo en ventanas de colores distintos).

Las propiedades de Windows de la carpeta están configuradas como muy limpias y simplificadas: funciona como una pequeña consola con íconos de acceso directo para cada una de mis frecuentes conexiones remotas PuTTY y RDP.

(solución 1)
Como se mencionó en otras respuestas, el interruptor -m se usa para configurar un script en el lado de Windows para que se ejecute, el interruptor -t se usa para permanecer conectado, pero descubrí que era sensible al orden si quería que se ejecutara sin saliendo

Lo que finalmente pude trabajar después de mucho ensayo y error fue:

(campo de destino de acceso directo):

"C:Program Files (x86)PuTTYputty.exe" -t -load "SSH Proxy" -m "C:Users[me]Documentshello-world-bash.txt"

donde se veía el archivo que se estaba ejecutando

echo "Hello, World!"
echo ""
export PUTTYVAR=PROXY
/usr/local/bin/bash

(no se necesitan puntos y comas)

Esto ejecuta el comando con secuencia de comandos (en mi caso, simplemente imprime “Hola, mundo” en la terminal) y establece una variable con la que mi sesión remota puede interactuar.

Nota para la depuración: cuando ejecuta PuTTY, carga el script -m, si edita el script, debe volver a iniciar PuTTY en lugar de simplemente reiniciar la sesión.

(solución 2)
Este método se siente mucho más limpio, ya que el cerebro está en el lado remoto de Unix en lugar del lado local de Windows:

Desde la sesión maestra de Putty (no “editar la configuración” de la sesión existente) cargue una configuración guardada y en la pestaña SSH configure el comando remoto para:

export PUTTYVAR=GREEN; bash -l

Luego, en mi .bashrc, tengo una sección que realiza diferentes acciones en función de esa variable:

case $PUTTYVAR in
  "")
    echo "" 
    ;;
  "PROXY")
    # this is the session config with all the SSH tunnels defined in it
    echo "";
    echo "Special window just for holding tunnels open." ;
    echo "";
    PROMPT_COMMAND='echo -ne "33]0;Proxy Session @master01$07"'
    alias temppass="ssh keyholder.example.com makeonetimepassword"
    alias | grep temppass
    ;;
  "GREEN")
    echo "";
    echo "It's not easy being green"
    ;;
  "GRAY")
    echo ""
    echo "The gray ghost"
    ;;
  *)
    echo "";
    echo "Unknown PUTTYVAR setting $PUTTYVAR"
    ;;
esac

(solución 3, sin probar)

También debería ser posible hacer que bash omita mi .bashrc y ejecute una secuencia de comandos de inicio diferente, colocando esto en el campo de comando PuTTY SSH:

bash --rcfile .bashrc_variant -l 

Cuando usas el -m La opción masilla no asigna un tty, ejecuta el comando y se cierra. Si desea ejecutar un script interactivo (como un cliente sql), debe indicarle que asigne un tty con -tver 3.8.3.12 -t and -T: control pseudo-terminal allocation. Evitará mantener un script en el servidor, además de tener que invocarlo una vez que esté conectado.

Esto es lo que estoy usando para conectarme a mysql desde un archivo por lotes:

#mysql.bat
start putty -t -load "sessionname" -l username -pw password -m c:mysql.sh

#mysql.sh
mysql -h localhost -u username --password="foo" mydb

https://superuser.com/questions/587629/putty-run-a-remote-command-after-login-keep-the-shell-running

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *