代理人

代理人

我有多台机器在现场,想要进行无人值守升级,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",

相关内容