Дистанционное программирование - PullRequest
8 голосов
/ 02 марта 2009

Я занимаюсь разработкой на моей машине с Windows, но компилирую на удаленной машине с Linux. В настоящее время я запускаю X-сервер в Windows, ssh на Linux-машину, а затем выполняю разработку удаленно.

Что я хотел бы сделать, так это отредактировать мой источник на компьютере с Windows и автоматически копировать файлы в систему Linux при сохранении. Я также хотел бы, чтобы мои встроенные команды компиляции выполняли сборку на удаленной системе.

Если это имеет значение, все источники находятся на C, используя GCC. В порядке убывания предпочтений у меня на рабочем столе есть Emacs, Vi и Netbeans, и я готов установить еще одну IDE для последнего средства.

Ответы [ 10 ]

24 голосов
/ 02 марта 2009

Это, безусловно, выполнимо в vim. Вы можете использовать протокол scp: // в vim для редактирования удаленных файлов и установки команды для записи локальной копии. Вы также можете изменить то, для чего программа vim использует: make вместо ssh make на вашем сервере.

Вам нужно будет настроить ваши ssh-ключи, чтобы сохранить это безболезненно (иначе вы будете вводить свой пароль все время), но это довольно просто.

Другой альтернативой может быть передача удаленных репозиториев как часть вашей команды make вместо удаленного редактирования.


EDIT:

Во-первых, используя протокол scp:// в vim. С :help netrw-start (или вниз по странице с :help scp)

Netrw поддерживает "прозрачное" редактирование файлов на других машинах с использованием URL-адресов. (см. | netrw-transparent |). Как пример этого, давайте предположим, что у вас есть учётная запись на какой-то другой машине; если вы можете использовать scp, попробуйте:

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

Хотите облегчить использование ssh / scp? Проверьте | netrw-ssh-hack |!

Вы также можете использовать scp:// пути в командах :edit или в любом месте, где вы можете использовать обычный путь.

И, из упомянутого :help netrw-ssh-hack, инструкции по настройке ваших ssh-ключей:

УЛУЧШЕНИЕ ПРОСМОТРА * netrw-listhack * * netrw-ssh-hack * {{{2

Особенно с удаленным браузером каталогов, постоянно вводящим пароль утомительно.

Для систем Linux / Unix, книга "Linux Server Hacks - 100 промышленных возможностей" Советы и инструменты »Роб Фликенгер (О'Рейли, ISBN 0-596-00461-3) дает совет для настройки без паролей ssh ​​и scp и обсуждает связанные безопасности проблемы. Раньше было доступно на http://hacks.oreilly.com/pub/h/66, но, видимо, этот адрес сейчас перенаправляется на какой-то "хакзин". Я попытаюсь сделать резюме на основе этой статьи и сообщения от Бен Шмидт:

(1) Создать пару открытого / закрытого ключа на локальном компьютере (ssh клиент):

  ssh-keygen -t rsa

(сохранение файла в ~ / .ssh / id_rsa в соответствии с запросом)

(2) Просто нажмите на (когда дважды), чтобы получить пароль ключевая фраза. Если вы используете парольную фразу, вам также нужно будет использовать ssh-agent, поэтому вы должны вводить парольную фразу только один раз за сеанс. Если вы не используете парольную фразу, просто войдите в свой локальный компьютера или получения доступа к ключевому файлу любым способом будет достаточно для доступа к любым ssh-серверам, для которых этот ключ авторизован для входа в систему.

(3) Это создает два файла:

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

(4) На целевой машине (ssh-сервер):

 cd
 mkdir -p .ssh
 chmod 0700 .ssh

(5) На вашем локальном компьютере (ssh-клиент): (одна строка)

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

или, для OpenSSH, (одна строка)

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

Вы можете проверить это с помощью

 ssh {serverhostname}

и вы должны войти в систему на сервере без необходимости ввода что-нибудь.

Если вы решили использовать фразу-пароль, выполните:

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

Вам будет предложено ввести ключевую фразу при использовании ssh-add, но не впоследствии, когда вы используете SSH. Для использования с vim вы можете использовать

 ssh-agent vim

и, когда следующий в vim, используйте

 :!ssh-add

В качестве альтернативы, вы можете применить ssh-agent к терминалу, который вы планируете работает vim в:

 ssh-agent xterm &

и делайте ssh-add всякий раз, когда вам нужно.

Для Windows, люди в списке рассылки vim отметили, что Pageant помогает При этом необходимо избегать постоянного ввода пароля.

Кингстон Фунг написал о другом способе избежать необходимости постоянно входить Пароли:

Во избежание необходимости каждый раз вводить пароль для scp, вы обеспечить взломать документы для настройки учетной записи SSH без пароля. Я нашел лучший способ сделать это: я могу использовать обычную учетную запись ssh, которая использует пароль для доступа к материалу без необходимости ввода пароля каждый раз. Это хорошо для безопасности и удобства. Я пробовал открытый ключ sshавторизация + ssh-agent, реализующий это, и это работает! Вот два ссылки с инструкциями:

Для создания в удаленных системах вам нужно установить переменную makeprg в сделать SSH сделать. От :help makeprg

Программа, используемая для команды ": make". Смотрите |: make_makeprg |. Эта опция может содержать символы «%» и «#», которые расширены до текущее и альтернативное имя файла. |: _% | |: _ # | Переменные среды раскрываются |: set_env |. Смотрите | option-backslash | о включении пробелов и обратной косой черты.

Обратите внимание, что '|' должен быть экранирован дважды: один раз для ": set" и один раз для интерпретация команды. Когда вы используете фильтр под названием «myfilter» сделать это так:

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

Заполнитель "$ *" может быть задан (даже несколько раз) для указания где аргументы будут включены, например:

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

Эта опция не может быть установлена ​​из | modeline | или в «песочнице», для соображения безопасности.

13 голосов
/ 02 марта 2009

Один из вариантов - использовать пакет удаленного редактирования TRAMP (встроенный в Emacs 22 и новее, и вы можете установить его в более старые версии). Каждый раз, когда вы сохраняете ваш файл, Emacs отправляет его содержимое через ssh (по умолчанию; конечно, каждая деталь полностью настраивается) на компьютер с Linux. Такие команды, как M-x compile и M-x grep, поддерживают TRAMP и выполняются на удаленном хосте.

6 голосов
/ 02 марта 2009

Я бы посмотрел на непрерывную интеграцию для вашей среды. Таким образом, вы можете зафиксировать изменения в управлении исходным кодом и использовать Linux-сервер в качестве сервера сборки. У вас могут быть связанные тесты и другие интересные вещи, которые вы хотите запускать в сборках.

Обновление 1: Также это может работать для вас: http://metamod -p.sourceforge.net / cross-compiling.on.windows.for.linux.html (it Также стоит попробовать выполнить поиск похожих инструментов)

5 голосов
/ 02 марта 2009

Другие предложили SAMBA, что может быть неосуществимо на вашем Linux-компьютере. Хорошей альтернативой является использование Dokan SSHFS на вашем компьютере с Windows для монтирования удаленного каталога через SSH.

2 голосов
/ 02 марта 2009

Почему вы запускаете X-сервер в Windows? Лично я бы настроил виртуальную машину Linux с VMware или любой другой вашей любимой технологией VM (VMware бесплатна и хорошо работает). Затем выберите любой дистрибутив Linux. Вам просто нужны очень простые функции, в основном стандартный набор инструментов. Вы можете выбрать Centos, Ubuntu, Fedora, Debian, что угодно. Я обычно использую Centos или Debian. Настройте его и просто используйте PuTTY в своей виртуальной машине. Оттуда вы можете отправлять файлы scp на удаленный сервер и так далее. Таким образом, вам не нужно беспокоиться о Cygwin или X-сервере или о чем-то подобном.

2 голосов
/ 02 марта 2009

Вы можете попробовать разделить диск между компьютерами с Linux и Windows, используя Samba или что-то в этом роде. Затем вы можете редактировать на своих локальных компьютерах, и файлы будут видны сразу на удаленном компьютере, поскольку диск будет виден обоим.

Там, где я работаю, у нас есть все файлы в NFS, доступные со всех машин Linux и Windows. Я не знаю, насколько сложно это настроить, поскольку я работаю в крупной корпорации, и информационные технологии отвлекаются от меня, но простой общий доступ к диску должен быть довольно простым.

1 голос
/ 02 марта 2009

Установите систему контроля версий и используйте ее. Затем вы можете просто сделать коммит после сохранения в вашей IDE, и на сервере вы можете что-то сделать при фиксации.

Это может запускать тесты, создавать, отправлять вам сообщения об ошибках ...

1 голос
/ 02 марта 2009

Можно ли просто использовать общий ресурс samba для сохранения файлов непосредственно на удаленном компьютере? Я часто так делаю PHP.

Тогда просто откройте окно замазки для запуска команд на удаленном блоке.

Или я что-то упустил?

0 голосов
/ 03 марта 2009

Я лично использую XMing с PuTTY . Я использую PuTTY, пока XMing работает. Я могу открыть любой редактор (gvim, emacs, gedit и т. Д.), И он появится.

Вам потребуется выполнить некоторые настройки в PuTTY:

  1. Развернуть соединение
  2. Расширить SSH
  3. Нажмите на X11
  4. Отметьте «Включить пересылку X11»
  5. В текстовое поле для отображения местоположения введите (без кавычек): "localhost: 0"
  6. Сохранить сессию и подключиться.
0 голосов
/ 02 марта 2009

Одним из решений может быть наличие какого-то приложения для опроса, которое проверяет временную метку на файлах, чтобы увидеть, изменились ли они. Если у них есть, получите его, чтобы сохранить, а затем скомпилировать. В некотором смысле хакерский путь, но это было бы осуществимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...