¿Cómo puedo ejecutar `make` y recuperar el binario de un host remoto sin` ssh`ing dos veces?


0

Estoy trabajando en un proyecto para el que no tengo la cadena de herramientas configurada en mi propia máquina y, por lo tanto, estoy desarrollando de forma remota. Mi flujo de trabajo en este momento se ve como sigue:

  • abrir el directorio del proyecto remoto en mi administrador de archivos usando sftp
  • editar algunos archivos
  • correr make remote, que se conecta a la máquina remota a través de ssh y se ejecuta make ahí:

    ssh $(HOST) cd $(DIRECTORY) \; make

  • correr make get, que transfiere el binario a través de scp:

    scp $(HOST):$(DIRECTORY)/build/$(FILE) .

  • prueba el binario y repite

El problema es que la máquina remota solo realiza la autenticación de contraseña, así que tengo que ingresar la contraseña dos veces en cada ciclo. No puedo construir y descargar en el mismo ssh ¿sesión?

Respuestas:


3

Creo que compartir sesiones SSH sería útil en esta situación. Le permite abrir varias sesiones a través de una sola conexión para que solo tenga que ingresar su contraseña una vez. En su .ssh / config:

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

Así que puedes abrir un terminal, SSH en tu servidor y ejecutar tu editor. Luego, podría abrir otra terminal, SSH en el mismo servidor utilizando la conexión compartida, y ejecutar make y scp desde allí. Más información:


¡Esta es la solución más limpia y directa al problema que podría imaginar! ¡Gracias!
Silly Freak

1

Monte el lado remoto usando sshfs y trabaje 'localmente'. Después de ejecutar su marca remota, verá el resultado en su punto de montaje local sin copiarlo explícitamente.


Junto con la sugerencia de Roberto, ¡esto me salva de cualquier escritura de contraseña! ¡Gracias!
Silly Freak

0

Si bien es posible combinar las dos tareas remotas en dos sesiones, en este caso se puede usar el montaje sftp del sistema de archivos remoto. En lugar de usar scp, puedes usar gvfs-move para make get:

gvfs-move sftp://$(HOST)$(REMOTE_HOME)/$(DIRECTORY)/build/$(FILE) .

ya que el soporte ya está establecido, es probable que sea más rápido que scp, incluso sin tener que introducir la contraseña.


0

Puede inscribirse en su comando make para leer su contraseña en una variable, luego puede usar sshpass para hacer las dos conexiones.

Algo como:

read -p "Enter your password: " PASSWORD
sshpass -p $PASSWORD ssh user@host 'cd '$(DIRECTORY)' \; make'
sshpass -p $PASSWORD scp $(HOST):$(DIRECTORY)/build/$(FILE) .

0

Quiero que se acepte la respuesta de Roberto, pero aun así comparto lo que terminé haciendo:

En primer lugar, utilicé la sugerencia de Roberto para habilitar el intercambio de sesiones: en .ssh/config:

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

Además, sí monte el sistema de archivos remoto usando sshfs (todo en el makefile):

mount:
    sshfs $(HOST):$(DIRECTORY) $(MOUNTPOINT)

unmount:
    fusermount -u $(MOUNTPOINT)

Para los objetivos de construcción reales:

make:
    ssh $(HOST) cd $(DIRECTORY) \; make

clean:
    ssh $(HOST) cd $(DIRECTORY) \; make clean

Ya que sshfs mantiene una conexión ssh abierta, no necesito ingresar la contraseña en absoluto mientras trabajo, y no es necesario un manejo especial para el binario (por eso me salto el install objetivo). La ventaja adicional de tener un punto de montaje plano es que puedo usar git como con cualquier proyecto ordinario.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.