我如何才能运行“make”并从远程主机检索二进制文件而无需两次“ssh”?

我如何才能运行“make”并从远程主机检索二进制文件而无需两次“ssh”?

我正在开发一个项目,但我自己的机器上没有配置工具链,因此我正在远程开发。我现在的工作流程如下:

  • 使用 sftp 在我的文件管理器中打开远程项目目录
  • 编辑一些文件
  • run make remote,通过 ssh 连接到远程机器并make在那里运行:

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

  • 运行make get,通过以下方式传输二进制文件scp

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

  • 测试二进制文件并重复

问题是,远程机器只进行密码验证,所以我必须在每个周期输入两次密码。我不能在同一个ssh会话中构建和下载吗?

答案1

我认为 SSH 会话共享在这种情况下会很有用。它允许您通过单个连接打开多个会话,这样您只需输入一次密码。在您的 .ssh/config 中:

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

因此,您可以打开一个终端,通过 SSH 连接到您的服务器,然后运行您的编辑器。然后,您可以打开另一个终端,使用共享连接通过 SSH 连接到同一台服务器,然后从那里运行 make 和 scp。更多信息:

答案2

使用 sshfs 挂载远程端并“本地”工作。运行远程 make 后,您将在本地挂载点看到结果,而无需明确复制它。

答案3

虽然可以将两个远程任务合并到两个会话中,但在这种情况下可以使用远程文件系统的 sftp 挂载。除了使用scp,您还可以使用gvfs-movefor make get

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

由于挂载已经建立,它可能比 更快scp,甚至无需输入密码。

答案4

我想让罗伯托的回答保持被接受,但仍然分享我最终所做的事情:

首先,我采用了Roberto的建议来启用会话共享:在.ssh/config

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

sshfs此外,我确实使用(makefile 中的所有内容)挂载了远程文件系统:

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

unmount:
    fusermount -u $(MOUNTPOINT)

对于实际建设目标:

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

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

由于sshfs保持 ssh 连接打开,我在工作时根本不需要输入密码,也不需要对二进制文件进行任何特殊处理(这就是我跳过目标的原因install)。拥有普通挂载点的另一个好处是,我可以像处理任何普通项目一样使用 git。

相关内容