我有多台机器在现场,想要进行无人值守升级,apt-get 似乎支持此功能。但是,我想将不同的主机更新到不同的版本,例如返回不同的 Packages.gz 文件。但检查 apt-get 发送的 http 标头时,我看到了以下内容:
Content-Length:
User-Agent: Debian APT-HTTP/1.3 (1.0.1ubuntu2)
Host: localhost:9991
Cache-Control: max-age=0
Content-Type:
没有关于谁发送了请求的信息。我知道这对于常见用例来说很棒,但是有没有办法配置 apt-get 以在标Authorization
头中发送 JWT 令牌?
答案1
我认为这不可能直接实现,但我可以看到有两种方法可以解决这个问题:
1)代理
2)服务器管理系统
代理人
您可以在每个托管服务器上设置一个代理,在转发请求之前添加所需的标头,这样从管理服务器端来看,您的请求就具有所需的标头。为此,您可以使用预建的代理,也可以使用这代码作为起点。
服务器管理系统
作为替代选择,您可以使用像 Landscape 这样的系统,它具有以下特点。
- 您可以从同一个 Web UI 管理所有服务器,也可以使用提供的 API
- 您可以设置更新规则
- 您可以将新包推送到服务器或服务器集
- 您可以在托管服务器上运行脚本
- 当您的服务器出现安全漏洞时,您可以自动发送电子邮件并自动应用软件包。
- 您可以检查服务器状态和信息
最多 10 台服务器免费,设置说明如下这里
编辑:
检查了来源此时似乎无法设置自定义标题,似乎只能设置以下标题:
- Host => 服务器主机名
- Cache-Control => 用于缓存
- Accept => 要发送的响应类型
- 范围 => 用于请求一定数量的数据
- If-Modified-Since => 用于仅获取更新的数据
- Proxy-Authorization => 用于代理连接登录
- 授权 => 用于用户名/密码验证
- User-Agent => 说明使用什么软件
如果您确实想要,您可以始终将您的身份验证负载隐藏在 User-Agent 标头中,但这并不是按照要求添加新的标头。
答案2
不确定 JWT,但如果这是您主要关心的问题,您肯定可以添加基于客户端证书的身份验证,这可以大大有助于保护您的包裹。
apt-get 安装 apt-transport-https
并获取配置设置
Acquire::https::packagedomain.name.com::Verify-Peer "false";
Acquire::https::packagedomain.name.com::Verify-Host "false";
Acquire::https::packagedomain.name.com::CaInfo "/certs/ca.pem";
Acquire::https::packagedomain.name.com::SslCert "/path/clientcert.pem";
Acquire::https::packagedomain.name.com::SslKey "/path/clientkey.pem";
在 nginx 端启用以下指令
"ssl_client_certificate",
"ssl_verify_client",