好吧,考虑到凭据以非安全方式存储在文件系统的某处(Ubuntu 上的默认选项)。有很多网站告诉您使用 SSH 更安全,应该用作-
“使用 HTTPS,凭据存储在未加密的文件中”
然而,这对我来说意义不大:使用 SSH,您还有一个存储(私有)密钥的简单文件,因此任何获取该文件的人都可以轻松连接到 git 存储库。
而且这并不是说这两个文件都更难访问:两者都只是存储在本地文件系统中,大部分都是未加密的(在 Linux 上)。
那么是什么让 SSH 比 HTTPS 更安全呢?
cjs*_*cjs 23
我不清楚您是否被告知在您的特定情况下SSH 比 HTTPS 更安全(我们没有所有详细信息),这可能是绝对正确的,或者您是否已被视为一般建议。对于那些不精通安全系统分析的人来说,SSH 与 HTTPS 的分析可能出奇地复杂,这就是为什么我们倾向于做出广泛的陈述,例如“SSH 比 HTTPS 更安全”:它通常会是真的,即使它是并非在所有情况下都是如此。无论如何,这里有一些关于这个问题的想法。
由于您提到将凭据存储在文件中,因此此答案假定您对 HTTPS 和 SSH 都使用公钥/私钥身份验证。在这两种情况下,密码身份验证的安全性都大大降低。
首先,您假设存储在磁盘上的用户凭据不受密码保护。这可能是也可能不是,但如果它受到密码保护,这将大大提高安全性。
在 SSH 的情况下,凭证更有可能受到密码保护,因为密钥代理更易于使用,并且更频繁地与 SSH 一起使用。使用 SSH 时,密钥代理几乎总是可用的,因为ssh-agent
几乎所有标准的 SSH 客户端工具集都包含类似的工具。这也使得使用代理的培训变得容易,因为以一种特定方式使用一种工具的培训几乎适用于任何地方。
HTTPS 系统的关键代理要多样化得多,安装可能不太常见,即使在特定系统中可用,也不太可能有人知道某个特定的可用并知道如何使用它。
其次,SSH 支持远程代理连接,允许从您正在执行的系统中删除密钥材料,git fetch
这在许多情况下可以大大提高安全性。这最好通过我最常见的工作流程示例来描述。
我的笔记本电脑是一台“个人”机器,因为我是唯一可以使用它的人。(它具有全盘加密和仅适用于我的用户帐户。)当我登录时,我启动本地ssh-agent
并将我的密钥(也受密码保护)加载到其中,并ssh-askpass
通过ssh-add -c
.
当我通过 SSH 连接到我正在进行开发的主机时,通常与其他人共享,我ssh -A
用来启用代理转发。然后git
fetch
,它会启动从开发主机到 Git 远程服务器的 SSH 会话。
当远程请求进行身份验证时,该 SSH 会接收请求并将其转发回我笔记本电脑上的代理。我在屏幕上收到一条警报,说我的本地代理已收到身份验证请求,这是我期望的,因为我刚刚启动了会导致该请求的操作,因此我批准了身份验证。开发主机上的 SSH 进程接收回它需要进行身份验证的信息(仅对特定会话有效),成功通过远程服务器git fetch
进行身份验证,然后我继续。
请注意,这要安全得多,因为 a)密钥从未在开发服务器上,因此攻击者很难访问(他们需要使用我的私人笔记本电脑),并且 b) 我收到有关我的请求的通知要使用的密钥,允许我检测使用密钥的意外尝试。(任何在开发服务器上拥有 root 权限的用户也可以将身份验证请求转发到我的笔记本电脑。)而且我不必每次都输入密码,因此拥有密码保护的密钥文件就少了很多麻烦。
归档时间: |
|
查看次数: |
6204 次 |
最近记录: |