我正在寻找一种方法来限制访问一个私人的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
优点
ssh-ask来接受/拒绝每一次使用密钥的尝试。 一种方法是只允许一组IP访问存储库。 这对于LAN和VPN来说非常有效。
简单而高效。
ssh +公钥/私钥解决scheme并不是那么糟糕:
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 )。