我正在寻找一种方法来限制对私有 Debian 存储库的访问,并能够以非交互方式对其进行身份验证(即使用脚本)
我发现最有用的文章实际上是来自Debian 管理站点但安全方法使用 ssh 和公钥/私钥。它工作得很好,但每个主机的公钥都需要位于远程 authorized_keys 文件中才能成功验证。它没有提到向 ssh:// 提供密码,但我认为这应该是可能的。
您是否尝试过其他替代方案(例如 ftps)?
提前致谢
答案1
如果你总是apt-get
手动运行你的服务器(没有apt-get
cron 自动启动的命令),那么你可以考虑使用ssh 代理转发。这样就避免了必须为您管理的每个服务器管理一个公钥/私钥对,而且可能比在每个服务器上都留下私钥更安全。
初始配置
- 连接到您想要管理的服务器,并添加类似这样的内容/etc/apt/sources.list
(此示例假设您希望您的服务器连接到帐户manager
):
deb ssh://[email protected]/path other stuff
在您自己的计算机上创建一对私钥/公钥,
johndoe
例如使用您的登录名(假设您的计算机运行的是 debian:如果不是,您可以从专用于管理的 debian 服务器执行此操作):ssh-keygen
- 确保它受到强关键词的保护
将您的公钥复制到存储库服务器
/home/manager/.ssh/authorized_keys
:ssh-copy-id [email protected]
每个管理会话一次
输入以下命令在你的机器上启动 ssh 代理:
eval `ssh-agent`
将您的密钥添加到代理(这将需要您的密码):
ssh-add
管理服务器
连接到您想要管理的服务器
ssh -A
(-A
激活代理转发):ssh -A some.server.org
切换到 root (如果你想使用
sudo
你需要配置/etc/sudoers
否则sudo
会破坏代理转发,读这个):su
现在,您应该能够使用 ssh 连接到存储库的管理员帐户,而无需再次输入密码,这要归功于代理转发。因此,
apt-get
应该可以正常工作:apt-get udate
结束管理会话
完成服务器管理后,从代理中删除密钥:
ssh-add -D
优点
- 不需要太多初始配置
- 只需一个私钥
- 私钥受强密码保护
- 如果有人获得您某台服务器的根访问权限,他们将无法立即访问您的存储库服务器。
- 请注意,如果黑客有足够的耐心和技能,他可以等到您使用代理转发连接到服务器,然后他可以劫持转发机制以访问您的存储库服务器。
- 为了防止这种情况,您可以使用
ssh-ask
来接受/拒绝每次使用密钥的尝试。 - 无论如何,黑客都会不是获得私钥本身的访问权限:他只需劫持转发机制即可使用密钥,并且仅在您连接到服务器期间。
答案2
一种方法是只允许一组特定的 IP 访问存储库。这种方法对于 LAN 和 VPN 非常有效。
簡單、高效。
答案3
您可以设置对存储库的 https 访问,并通过登录名/密码(基本身份验证)进行保护。问题是您需要输入明文登录名/密码/etc/apt/sources.list
(注意:有一个补丁以允许输入登录名/密码/root/.netrc
)。
答案4
问题中的链接显示了多种方法。您需要第二种方法,https + 基本身份验证。