安全地限制访问私人Debian存储库

我正在寻找一种方法来限制访问一个私人的Debian存储库,并能够非交互式地进行身份validation(即使用脚本)

我发现的最有用的文章,如果其实是一个从Debianpipe理网站,但安全的方法使用SSH和公/私钥。 它工作的很好,但每个主机的公钥需要位于远程authorized_keys文件中才能成功进行身份validation。 它没有提供任何关于提供密码给SSH://但我想这应该是可能的。

你有没有尝试其他的select(如FTP)?

提前致谢

如果你总是手工运行你的服务器上的apt-get (没有crons启动的自动apt-get命令),那么你可以考虑使用ssh代理转发 。 这样可以避免必须pipe理每个您pipe理的服务器上的一个公钥/私钥对,并且可能比在每个服务器上留下私钥更安全。

初始configuration – 连接到你想要pipe理的服务器,并添加类似于/etc/apt/sources.list (这个例子假设你希望你的服务器连接到manager帐户):

  deb ssh://[email protected]/path other stuff 
  • 在你自己的计算机上创build一对私钥/公钥,例如你的loginjohndoe (假设你的计算机运行在debian上:如果没有,你可以从专门用于pipe理的debian服务器上完成):

     ssh-keygen 
  • 确保它受到强大的关键词的保护
  • 将您的公钥复制到/home/manager/.ssh/authorized_keys的存储库服务器:

     ssh-copy-id [email protected] 

每个pipe理会话一次

  • 键入以下命令启动计算机上的ssh代理程序:

     eval `ssh-agent` 
  • 将您的密钥添加到代理(这将需要您的密码):

     ssh-add 

pipe理服务器

  • 使用ssh -A连接到要pipe理的服务器( -A激活代理转发):

     ssh -A some.server.org 
  • 切换到root(如果你想使用sudo你需要configuration/etc/sudoers ,否则sudo会打断代理转发, 读这个 ):

     su 
  • 您现在应该能够使用ssh连接到资源库的经理帐户,而不必再次input密码,这要归功于代理转发。 因此, apt-get应该工作得很好:

     apt-get udate 

结束您的pipe理会话

  • 完成pipe理服务器后,从代理中删除您的密钥:

     ssh-add -D 

优点

  • 没有太多的初始configuration是必需的
  • 只需要一个私钥
  • 私钥受强密码的保护
  • 如果某人获得对某个服务器的根访问权限,他们将无法立即访问您的存储库服务器。
    • 请注意,如果黑客耐心等待,他可以等到使用代理转发连接到服务器,并且可以劫持转发机制以访问存储库服务器。
    • 为了防止这种情况发生,可以使用ssh-ask来接受/拒绝每一次使用密钥的尝试。
    • 在任何情况下,黑客本身都无法访问私钥:只有当你连接到服务器的时候,他才能够劫持转发机制以使用密钥。

一种方法是只允许一组IP访问存储库。 这对于LAN和VPN来说非常有效。

简单而高效。

ssh +公钥/私钥解决scheme并不是那么糟糕:

  • 在客户机上以rootlogin
  • 键入ssh-keygen ,然后ssh-copy-id [email protected]
  • 编辑/etc/apt/sources.list并添加如下内容:

     deb ssh://[email protected]/path other stuff 

当然,它要求你把每个服务器的公钥放在服务器上的~/.ssh/authorized_keys文件中,但并不复杂(见上文),它允许你在任何时候控制你允许或不允许的服务器您可以随时在authorized_keys删除一个密钥)。

您的问题中的链接显示了多种方法。 你想要2号,https +基本authentication。

你可以设置https访问你的仓库,通过login/密码(基本authentication)保护。 问题是你需要把明文login/密码放在/etc/apt/sources.list (注意: 有一个补丁允许login/密码放在/root/.netrc )。