我正在开发一个项目,但我自己的机器上没有配置工具链,因此我正在远程开发。我现在的工作流程如下:
- 使用 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-move
for 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。