2009-03-02 11 views
8

Estoy haciendo mi trabajo de desarrollo en mi máquina con Windows, pero mi compilación en una máquina Linux remota. Lo que hago actualmente es iniciar un servidor X en Windows, ssh en la máquina Linux y luego hacer el desarrollo de forma remota.Programación remota

Lo que me gustaría hacer es editar mi fuente en la máquina Windows, y haga que sea copiar automáticamente los archivos al sistema de Linux al guardar. También me gustaría que mis comandos de compilación integrados realicen una compilación en el sistema remoto.

Si hace la diferencia, la fuente está en C, usando GCC. En orden descendente de preferencia, tengo Emacs, Vi y Netbeans en mi escritorio, y estoy dispuesto a instalar otro IDE como último recurso.

Respuesta

13

Una opción es utilizar el paquete de edición remota TRAMP (integrado en Emacs 22 y posteriores, y se puede instalar en las versiones anteriores) Cada vez que guarda su archivo, Emacs envía su contenido a través de ssh (por defecto, por supuesto, cada detalle es totalmente configurable) a la máquina Linux. Los comandos como M-x compile y M-x grep son compatibles con TRAMP y se ejecutan en el host remoto.

0

Una solución podría ser la de tener algún tipo de aplicación de sondeo que comprueba la fecha y hora de los archivos para ver si han cambiado. Si lo tienen, consígalo para guardar y luego compilar. Un poco hackish de esta manera, pero sería viable.

6

Me gustaría ver la integración continua para su entorno. De esta forma, puede confirmar los cambios en el control de origen y hacer que el cuadro de Linux actúe como un servidor de compilación. Puede tener pruebas asociadas y otras cosas interesantes relacionadas que desee que se ejecuten en las compilaciones.

Actualización 1: Además, este podría funcionar para usted: http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html (que también es digno de un intento de hacer algunas búsquedas en herramientas similares)

+0

Pero no deseo depender de los controles para compilación; Deseo construir primero para asegurarme de que sea bueno antes del registro. –

2

Usted podría intentar compartir un disco entre sus máquinas Linux y Windows usando Samba o algo como eso. Luego podría editar en sus máquinas locales y los archivos serían visibles inmediatamente en la máquina remota ya que la unidad sería visible para ambos.

donde trabajo tenemos todos los archivos de NFS que es accesible desde todas las máquinas Linux y las máquinas Windows. No sé qué tan difícil es configurar eso ya que trabajo en una gran empresa y la TI se abstrae de mí, pero el simple intercambio de disco debería ser bastante sencillo.

1

¿Puedes usar un recurso compartido de samba para guardar los archivos directamente en la máquina remota? A menudo hago PHP de esta manera.

Luego solo tiene una ventana de masilla abierta para ejecutar comandos en el cuadro remoto.

¿O me está faltando algo?

2

¿Por qué inicia un servidor X en Windows? Personalmente, configuraría una VM de Linux con VMware o cualquiera que sea su tecnología de VM favorita (VMware es gratuito y funciona bien). A continuación, elija la distribución de Linux que desee. Solo necesita funciones muy básicas, principalmente la "cadena de herramientas" estándar. Podrías elegir Centos, Ubuntu, Fedora, Debian, lo que sea. Usualmente uso Centos o Debian. Configúralo y solo usa PuTTY en tu VM. A partir de ahí, puede scp archivos a su servidor remoto y así sucesivamente. De esta forma no tienes que molestarte con cygwin o un servidor X o nada de eso.

5

Otros han sugerido SAMBA que puede no ser factible en su caja Linux. Una buena alternativa es usar Dokan SSHFS en su cuadro de Windows para montar un directorio remoto a través de SSH.

24

Esto es ciertamente factible en vim. Puede usar el protocolo scp: // dentro de vim para editar archivos remotos y configurar un comando que escriba una copia local. También puede cambiar el programa utilizado por vim: make para hacer una ssh make en su servidor.

Tendrá que configurar sus llaves ssh para mantener este dolor (de lo contrario se le introduce su contraseña todo el tiempo), pero eso es bastante fácil.

Otra alternativa sería la de empujar a una repositorios remotos como parte de su comando make, en lugar de editar de forma remota.


EDIT:

En primer lugar, utilizando el protocolo scp:// dentro de vim. De :help netrw-start (o hacia abajo de la página :help scp)

netrw soporta la edición de "transparente" de los archivos en otras máquinas que utilizan direcciones URL (véase | netrw transparente |). Como ejemplo de esto, supongamos que tiene una cuenta en otra máquina; si se puede usar scp, intente:

vim scp://hostname/path/to/file 

Quieres hacer ssh/scp más fácil de usar? Verifique | netrw-ssh-hack |

También puede usar las rutas scp:// en los comandos :edit, o en cualquier lugar donde pueda usar una ruta normal.

Y, desde el mencionado :help netrw-ssh-hack, instrucciones sobre cómo configurar las claves SSH:

MEJORA DE LA NAVEGACIÓN * netrw-listhack * * netrw-ssh-Hack * {{{2

Especialmente con el buscador de directorio remoto, ingresar constantemente la contraseña es tedioso.

Para los sistemas Linux/Unix, el libro "Linux Hacks servidor - 100 fuerza industrial consejos & herramientas" de Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) da una punta para la creación de ningún -password ssh y scp y analiza los problemas de seguridad asociados . Solía ​​estar disponible en http://hacks.oreilly.com/pub/h/66, pero aparentemente esa dirección ahora está siendo redireccionada a algún "hackzine". voy a intentar un resumen basado en dicho artículo, y en una comunicación de Ben Schmidt:

(1) Generar un/pair pública clave privada en la máquina local (cliente SSH):

ssh-keygen -t rsa 

(guardando el archivo en ~/.ssh/id_rsa cuando se le solicite)

(2) Sólo tiene que darle la frase de contraseña cuando se le pide (dos veces) sin frase de contraseña. Si usa una frase de contraseña, también necesitará usar ssh-agent para que solo tenga que escribir la frase de contraseña una vez por sesión. Si usted no utiliza una contraseña, simplemente iniciar sesión en el equipo local o conseguir acceso al archivo de claves de ninguna manera será suficiente a acceder a servidores SSH, que tienen esa llave autorizada para iniciar sesión.

(3) Esto crea dos archivos:

~/.ssh/id\_rsa 
    ~/.ssh/id\_rsa.pub 

(4) En el equipo de destino (servidor SSH):

cd 
mkdir -p .ssh 
chmod 0700 .ssh 

(5) En la máquina (cliente SSH) locales: (una línea)

ssh {serverhostname} cat '>>' '~/.ssh/authorized\_keys2' < ~/.ssh/id_rsa.pub 

o, para OpenSSH, (una línea)

ssh {serverhostname} cat '>>' '~/.ssh/authorized\_keys' < ~/.ssh/id_rsa.pub 

Puede probarlo con

ssh {serverhostname} 

y que debe iniciar sesión en el equipo del servidor sin más que teclear nada.

Si ha decidido usar una frase de paso, hacer:

ssh-agent $SHELL 
ssh-add 
ssh {serverhostname} 

Se le pedirá la contraseña de frase clave cuando se utiliza ssh-add, pero no posteriormente cuando se utiliza ssh. Para su uso con vim, puede utilizar

ssh-agent vim 

y, en su siguiente dentro de vim, utilice

:!ssh-add 

Alternativamente, se puede aplicar ssh-agente para la terminal que está pensando en corriendo en vim :

ssh-agent xterm & 

y haga ssh-add siempre que lo necesite.

Para Windows, las personas en la lista de correo vim han mencionado que el concurso ayuda a evitando la constante necesidad de ingresar la contraseña.

Kingston Fung escribió sobre otra forma de evitar la constante necesidad de introducir contraseñas:

Con el fin de evitar la necesidad de escribir la contraseña para SCP cada vez, proporciona un corte en la documentación a configurar una cuenta ssh sin contraseña. Encontré un mejor manera de hacerlo: puedo usar una cuenta ssh regular que usa una contraseña para acceder al material sin la necesidad de ingresar la contraseña cada vez. Es bueno para la seguridad y la conveniencia. Probé la clave pública 0sh ssh autorización + ssh-agent, implementando esto, ¡y funciona!Aquí hay dos vínculos con las instrucciones:

para la toma en sistemas remotos, es necesario establecer la variable de makeprg a hacer un hacer ssh. De :help makeprg

Programa que se utiliza para el comando ": make". Ver |: make_makeprg |. Esta opción puede contener los caracteres '%' y '#', que se expanden a , el nombre de archivo actual y alternativo. |: _% | |: _ # | Las variables de entorno están expandidas |: set_env |. Ver | opción-barra invertida | acerca de incluir espacios y barras diagonales inversas.

Tenga en cuenta que un '|' debe escaparse dos veces: una vez para ": establecer" y una vez para la interpretación de un comando. Cuando se utiliza un filtro llamado "myFilter" hacerlo de esta manera:

:set makeprg=gmake\ \\\|\ myfilter 

El marcador de posición "$ *" puede ser dado (incluso varias veces) para especificar , donde se incluirán los argumentos, por ejemplo:

:set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} 

Esta opción no se puede configurar desde | modeline | o en | sandbox |, por razones de seguridad .

+0

Me encantaría ver detalles sobre el uso del protocolo scp: //. Sería bueno incluir un puntero a las instrucciones de ssh-keys también. – dreeves

+0

Gracias por copiar la página man de Vim en 'scp', pero no es lo que el chico necesita. Tendría que hacer eso para todos sus archivos. ¿Alguna idea sobre cómo trabajar de forma remota en un proyecto completo? –

+0

adrien-giboire: bueno, personalmente, me gustaría ir a la máquina, encender el tmux o la pantalla, y trabajar de forma remota de esa manera. Pero el autor de la pregunta dijo específicamente que querían desarrollarse localmente. Además, puede usar el prefijo 'scp: //' para cargar un directorio remoto en vim, y simplemente use el visor de archivos para seleccionar con qué desea trabajar. Pan comido. – rampion

1

Establezca un sistema de control de fuente y úselo. Luego puede hacer una confirmación después de guardar en su IDE, y en el servidor puede suceder algo en-commit.

Esto puede desencadenar pruebas, construir, enviar por correo cualquier error a usted ...

0

Personalmente uso XMing con . Uso ssh usando PuTTY mientras XMing se está ejecutando. Puedo abrir cualquier editor (gvim, emacs, gedit, etc.) y aparecerá.

Usted tendrá que hacer algún tipo de configuración de la masilla sin embargo:

  1. Expandir conexión
  2. Expandir SSH
  3. Haga clic en X11
  4. Compruebe la opción "Habilitar X11 Forwarding"
  5. En el texto campo para la ubicación de la pantalla, ingrese (sin comillas): "localhost: 0"
  6. Guarde la sesión y conéctese.