¿Cómo ejecutar un comando remoto en PuTTY después de iniciar sesión y mantener el shell en ejecución?

35

Lo que estoy tratando de hacer: iniciar una sesión PuTTY desde la línea de comandos, iniciar sesión en la máquina remota y cden el directorio proporcionado.

putty.exe -agent -ssh some.host

Eso abrirá una sesión e inicio de sesión con mi nombre de inicio de sesión predeterminado y clave privada.

echo cd /some/remote/path/ > c:/stuff/cmd.txt
putty.exe -agent -ssh some.host -m 'c:/stuff/cmd.txt'

Eso abrirá una sesión, iniciará sesión, ejecutará un comando ( cden este caso) y saldrá .

¿Cómo abro una sesión, inicio sesión cdy mantengo la sesión abierta?

Antecedentes: uso emacs bajo Windows y, a menudo, edito archivos en máquinas remotas de Unix usando vagabundo y plink. Quiero crear una tecla de acceso rápido que abra una sesión PuTTY para esa máquina remota y chdirs en el directorio de ese archivo. No es un gran problema por parte de emacs, pero estoy atrapado con PuTTY.

Artyom V. Kireev
fuente

Respuestas:

33

Lo que -mhace es que hace que PuTTY indique al servidor SSH que inicie ese comando (s) EN LUGAR de un shell. Entonces, una vez que finaliza su comando, también lo hace la sesión.

Si desea ejecutar el shell después del cdcomando, debe agregarlo explícitamente a su cmd.txt, como:

cd /my/path ; /bin/bash

También -mimplica el modo "nopty" ​​/ no interactivo. Para usar un shell interactivo, debe anularlo con el -tinterruptor .

putty.exe -ssh example.com -m "c:\path\cmd.txt" -t

Alternativamente, use KiTTY con su -cmdinterruptor, que hace lo que desea (y no necesita un archivo temporal).

Martin Prikryl
fuente
Lo intenté (agregando / bin / bash a cmd.txt) y eso no funciona. Por lo que yo entiendo, bash comienza en modo no interactivo y, al no tener código para ejecutar, sale. ¿Hay alguna manera de iniciar un shell interactivo de esa manera?
Artyom V. Kireev
Mientras tanto, intenté iniciar mc. :-) No lo hizo, y proporcionó algunos resultados:Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set.
Artyom V. Kireev
Gracias por la guía aquí, pero parece que tengo un problema al tratar de usar masilla -m "myfile.sh" -tpara conectarme a un tinycorelinux vm (/ bin / ash). Obtendré el siguiente error: i.imgur.com/QN5oRXC.png (mi guión comienza con echo ".."él siempre mostrará la primera letra en mi guión después de los caracteres ilegales
Vincent De Smet
si uso configurar un comando remoto en el perfil de masilla, funciona
Vincent De Smet
-1

La sesión de vagabundo que está comenzando en emacs y la sesión de shell que ejecuta a través de masilla son procesos completamente separados.

Probablemente sea mejor que verifique las opciones de configuración de vagabundo para ver si hay una manera de establecer un directorio predeterminado por host dentro de su configuración de emacs. Tal vez comience con la tramp-remote-pathopción de configuración como se documenta aquí .

Si necesita usar masilla para establecer la conexión, probablemente desee configurar un túnel ssh y hacer que emacs / tramp se conecte a través de eso.

Doug Harris
fuente
Emacs y tramp son irrelevantes aquí, lo agregué solo para el fondo. No se trata de editar archivos en emacs, se trata de abrir un shell para hacer algo más con ese archivo (por ejemplo, ejecutar un script). Estoy cansado de "iniciar la masilla, elegir su host, luego cd a la ruta que necesita", y quiero automatizar eso.
Artyom V. Kireev