【问题标题】:Remotely Programming远程编程
【发布时间】:2010-10-10 17:37:01
【问题描述】:

我在我的 Windows 机器上进行开发工作,但我在远程 Linux 机器上进行编译。我目前做的是在 Windows 上启动 X 服务器,通过 ssh 进入 Linux 机器,然后进行远程开发。

我想做的是在 Windows 机器上编辑我的源代码,并让它在我保存时自动将文件复制到 Linux 系统。我还希望我的内置编译命令能够在远程系统上执行构建。

如果有什么不同,源代码都是 C 语言,使用 GCC。按偏好降序排列,我的桌面上有 Emacs、Vi 和 Netbeans,并且愿意安装另一个 IDE 以备不时之需。

【问题讨论】:

    标签: vim emacs cross-platform


    【解决方案1】:

    这在 vim 中当然是可行的。您可以使用 vim 中的 scp:// 协议来编辑远程文件,并设置一个写入本地副本的命令。您还可以更改 vim 用于 :make 的程序以在您的服务器上执行 ssh make。

    您需要设置您的 ssh-keys 以保持这种轻松(否则您将一直输入密码)但这很容易。

    另一种选择是作为 make 命令的一部分推送到远程存储库,而不是远程编辑。


    编辑:

    首先,在 vim 中使用scp:// 协议。来自:help netrw-start(或从:help scp向下页面)

    Netrw 支持使用 url 在其他机器上“透明”编辑文件 (见|netrw-透明|)。作为一个例子,假设你有一个 其他机器上的帐户;如果您可以使用 scp,请尝试:

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

    想让 ssh/scp 更易于使用吗?查看 |netrw-ssh-hack|!

    您还可以在:edit 命令中使用scp:// 路径,或者实际上可以使用普通路径的任何地方。

    并且,来自提到的:help netrw-ssh-hack,有关如何设置 ssh 密钥的说明:

    改进浏览 *netrw-listhack* *netrw-ssh-hack* {{{2

    尤其是用远程目录浏览器,不断输入密码 很乏味。

    对于 Linux/Unix 系统,《Linux Server Hacks - 100 工业实力》一书 提示和工具”,Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) 给出了一个提示 用于设置无密码 ssh 和 scp 并讨论相关的安全性 问题。它曾经在http://hacks.oreilly.com/pub/h/66 上可用, 但显然该地址现在被重定向到一些“hackzine”。 我将尝试根据那篇文章和来自 本施密特:

    (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 有帮助 避免不断需要输入密码。

    Kingston Fung 写了另一种避免经常需要进入的方法 密码:

    为了避免每次都需要输入 scp 的密码,你 在文档中提供 hack 以设置非密码 ssh 帐户。我发现了一个 更好的方法:我可以使用一个普通的 ssh 帐户,它使用 无需输入密码即可访问材料的密码 每一次。这对安全性和便利性都有好处。我试过 ssh 公钥 授权+ ssh-agent,实现这个,它工作!这里有两个 带有说明的链接:

    要在远程系统上制作,您需要将 makeprg 变量设置为 做一个 ssh 制作。来自:help makeprg

    用于 ":make" 命令的程序。见|:make_makeprg|。 此选项可能包含 '%' 和 '#' 字符,它们被扩展为 当前和备用文件名。 |:_%| |:_#| 扩展环境变量|:set_env|。见 |选项-反斜杠| 关于包括空格和反斜杠。

    请注意,'|'必须转义两次:一次用于 ":set",一次用于 命令的解释。当您使用名为 "myfilter" 这样做:

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

    占位符“$*”可以给出(甚至多次)来指定 将包含参数的位置,例如:

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

    这个选项不能通过 |modeline| 设置。或在|沙盒|中,对于 安全原因。

    【讨论】:

    • 我很想了解有关使用 scp:// 协议的详细信息。也可以包含一个指向 ssh-keys 指令的指针。
    • 感谢您在scp 上复制 Vim 的手册页,但这不是他所需要的。他必须对他的所有文件都这样做。关于如何远程处理整个项目的任何想法?
    • adrien-giboire:好吧,就我个人而言,我只是通过 ssh 连接到机器,启动 tmux 或 screen,然后以这种方式远程工作。但提问者明确表示,他们想在本地发展。此外,您可以使用scp:// 前缀在vim 中加载远程目录,然后使用文件查看器选择您要使用的内容。轻松愉快。
    • @AdrienGiboire:我使用 sshfs 来做到这一点。基本上,通过 SSH 挂载一个远程文件夹,然后像在本地一样处理它。
    【解决方案2】:

    一种选择是使用TRAMP 远程编辑包(内置在 Emacs 22 和更新版本中,您可以将其安装到旧版本中)。每次保存文件时,Emacs 都会通过 ssh(默认情况下;当然每个细节都是完全可配置的)将其内容发送到 Linux 机器。像 M-x compileM-x grep 这样的命令可以识别 TRAMP 并在远程主机上执行。

    【讨论】:

      【解决方案3】:

      我会为您的环境研究持续集成。通过这种方式,您可以将更改提交到源代码管理,并让 linux 机器充当构建服务器。您可以在构建上运行相关的测试和其他相关的有趣内容。

      更新 1: 这可能对您有用:http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html(也值得尝试在类似工具上进行一些搜索)

      【讨论】:

      • 但我不想依赖签入来构建;我希望先构建以确保在签入之前它是好的。
      【解决方案4】:

      其他人建议了 SAMBA,这在您的 Linux 机器上可能不可行。一个不错的选择是在您的 Windows 机器上使用 Dokan SSHFS 通过 SSH 挂载远程目录。

      【讨论】:

        【解决方案5】:

        您可以尝试使用 Samba 或类似工具在 Linux 和 Windows 机器之间共享磁盘。然后您可以在本地计算机上进行编辑,并且文件将立即在远程计算机上可见,因为驱动器对两者都是可见的。

        在我工作的地方,我们拥有 NFS 上的所有文件,可从所有 Linux 机器和 Windows 机器访问。我不知道设置它有多难,因为我在一家大公司工作,IT 与我分离,但简单的磁盘共享应该非常简单。

        【讨论】:

          【解决方案6】:

          为什么要在 Windows 上启动 X 服务器?就个人而言,我会使用 VMware 或任何你最喜欢的 VM 技术设置 Linux VM(VMware 是免费的并且运行良好)。然后选择您想要的任何 Linux 发行版。您只需要非常基本的功能,主要是标准的“工具链”。你可以选择 Centos、Ubuntu、Fedora、Debian 等等。我通常使用 Centos 或 Debian。设置它,然后在你的 VM 中使用 PuTTY。从那里,您可以将文件 scp 到您的远程服务器等等。这样您就不必为 cygwin 或 X 服务器或其中任何一个而烦恼。

          【讨论】:

            【解决方案7】:

            您可以直接使用 samba 共享将文件保存在远程计算机上吗?我经常这样做PHP。

            然后只需打开一个腻子窗口即可在远程盒子上运行命令。

            还是我错过了什么?

            【讨论】:

              【解决方案8】:

              设置源代码控制系统并使用它。然后你可以在你的 IDE 中保存后进行提交,在服务器上你可以在提交时发生一些事情。

              这可以触发测试、构建、将任何错误发送给您...

              【讨论】:

                【解决方案9】:

                一种解决方案可能是使用某种轮询应用程序来检查文件上的时间戳以查看它们是否已更改。如果他们有然后保存它然后编译。这种方式有点骇人听闻,但它是可行的。

                【讨论】:

                  【解决方案10】:

                  我个人使用XMingPuTTY。我在 XMing 运行时使用 PuTTY SSH。我可以打开任何编辑器(gvim、emacs、gedit 等),它就会出现。

                  不过,您需要在 PuTTY 上进行一些设置:

                  1. 扩展连接
                  2. 扩展 SSH
                  3. 点击X11
                  4. 勾选“启用 X11 转发”
                  5. 在显示位置的文本字段中,输入(不带引号):“localhost:0”
                  6. 保存会话并连接。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-07-26
                    • 2013-09-16
                    • 2010-12-09
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多