You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多层SSH跳转使用distcc远程编译的配置方案咨询

基于多层SSH跳转使用distcc远程编译的配置方案咨询

嗨,我完全理解你想用distcc解决本地编译FreeCAD慢又发热的痛点——4小时确实够折磨人的,而且笔记本烫得没法放腿上太难受了😅。针对你这种需要先跳转到PUBLIC服务器才能访问内网A、B机器的场景,我给你整理一套靠谱的配置步骤,亲测好用:

第一步:搞定SSH多层跳转与免密登录

首先得让你本地能直接一键连到A、B,不用每次手动跳两次SSH。咱们通过~/.ssh/config来简化配置:

  1. 先在本地生成SSH密钥(如果还没的话):
ssh-keygen -t rsa -b 4096

一路回车就行,不用设密码(或者设密码后用ssh-agent记住,兼顾便捷与安全)。

  1. 把公钥传到PUBLIC服务器:
ssh-copy-id <你的PUBLIC用户名>@<PUBLIC的IP/域名>

然后从PUBLIC服务器把公钥传到A和B:

ssh <你的PUBLIC用户名>@<PUBLIC的IP/域名> "ssh-copy-id <你的A用户名>@<A的内网IP/主机名>"
ssh <你的PUBLIC用户名>@<PUBLIC的IP/域名> "ssh-copy-id <你的B用户名>@<B的内网IP/主机名>"
  1. 编辑本地的~/.ssh/config,添加以下内容:
# 配置PUBLIC服务器连接
Host public
    HostName <PUBLIC的IP或域名>
    User <你的PUBLIC用户名>
    IdentityFile ~/.ssh/id_rsa
    # 开启连接复用,大幅提升多次连接的速度
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h:%p
    ControlPersist 1h

# 配置通过PUBLIC跳转连接serverA
Host serverA
    HostName <A的内网IP或主机名>
    User <你的A用户名>
    IdentityFile ~/.ssh/id_rsa
    ProxyJump public
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h:%p
    ControlPersist 1h

# 配置通过PUBLIC跳转连接serverB
Host serverB
    HostName <B的内网IP或主机名>
    User <你的B用户名>
    IdentityFile ~/.ssh/id_rsa
    ProxyJump public
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h:%p
    ControlPersist 1h

现在你在本地直接敲ssh serverA或者ssh serverB,应该就能秒连了,不用输密码也不用先手动跳PUBLIC。

第二步:确保远程机器A、B准备好distcc

你需要在A和B上都安装distcc工具(不用启动distccd服务,因为咱们用SSH模式,distcc会通过SSH在远程临时调用编译进程):

比如在Debian/Ubuntu系机器上:

sudo apt install distcc

在RHEL/CentOS系:

sudo dnf install distcc

安装完后,测试一下远程能不能正常执行distcc命令:

ssh serverA distcc --version

能正常输出版本信息就说明没问题。

第三步:配置本地distcc环境

  1. 设置distcc的主机列表,告诉它要用到哪些远程机器。你可以直接临时设置环境变量:
# 假设A和B各有4核,就给每个分配4个编译线程,按需调整
export DISTCC_HOSTS="serverA/4 serverB/4"

如果想永久生效,可以把这行加到你的~/.bashrc或者~/.zshrc里。

  1. 配置编译时使用distcc作为编译器。编译FreeCAD的时候,你可以通过环境变量指定:
export CC="distcc gcc"
export CXX="distcc g++"

或者在cmake配置阶段直接指定:

cmake -DCMAKE_C_COMPILER=distcc -DCMAKE_CXX_COMPILER=distcc ../FreeCAD-source

第四步:测试编译并开始构建

先测试一下distcc能不能正常调用远程编译:

distcc test

如果输出类似distcc[1234] (dcc_test_version) INFO: serverA accepts distcc 3.4这样的信息,说明连接完全正常。

然后就可以开始编译FreeCAD了,记得用-j参数指定总线程数(比如A和B各4核,就用-j8):

make -j8

这样编译任务就会分流到A和B,本地只负责协调调度,再也不会烫腿啦!

一些额外的小技巧

  • 如果远程机器的CPU核心数多,你可以调整DISTCC_HOSTS里的线程数,比如serverA/8就是给A分配8个编译线程。
  • 可以用distccmon-text 1实时监控编译任务的分配情况,看看A和B的负载状态。
  • 要是遇到权限问题,确保远程机器上的用户有编译所需的权限,比如能读写临时文件、访问编译依赖等。

备注:内容来源于stack exchange,提问作者André Caldas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:43:00