使用 ssh 公钥的风险

10 ssh

我有服务器 A服务器 B(备份),我想知道,如果有人闯入服务器 A,如果我使用 ssh 公钥配置了无密码登录,闯入服务器 B 是否有潜在危险?

我正在尝试设置 rsnapshot。

谢谢

nat*_*ado 21

是的,这是无密码 SSH 密钥的问题之一。如果您在服务器 A 上存储允许您连接到服务器 B 的私钥,则获得对服务器 A 的访问权实际上是在获得对服务器 B 的访问权。(反之亦然——获得对服务器 B 的访问权不会导致立即攻陷服务器 A,假设您还没有设置 SSH 密钥以允许在该方向上进行无密码登录。

您可以采取一些措施来缓解这种情况:

  • 如果该过程不需要完全自动化,请为您的 SSH 密钥添加密码。(这可能对您不起作用,因为您注意到它用于备份)
  • 对于在您自己的帐户下对多台机器的无密码登录,我建议为您实际键入的每台机器创建一个密码密钥,并在您使用它时使用 SSH 代理将密钥存储在内存中。代理转发应该允许您在主机之间“跳跃”,而无需在每个远程主机上创建密钥。
  • 对于自动化的、无密码的 SSH 密钥,我建议限制密钥可以运行的命令。在您的authorized_keys文件中,为每个键添加前缀:
    command="<allowed command line here>",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

8-9 年前,我在一个有数百个本地用户的共享用户环境中工作,基于 SSH 密钥的登录被禁用,因为无法对密钥实施密码策略。只要您完全控制场景,现在 SSH 密钥肯定比仅使用密码更好。


jld*_*ger 7

是的,互联网上的大多数指南都停止让无密码 ssh 工作,而不是让它安全工作。本指南很好地展示了可以采取哪些措施来降低风险。基本上(引用文章):

  • 为作业创建一个单一用途的角色帐户:即dnssync每台机器上的一个用户
  • 如果可行,使文件可由该用户写入,而不是依赖于 root
  • 对于那些真正需要特权访问的位,创建一个脚本来执行它,并使用 sudo
  • 在文件中使用command=from=选项authorized_keys来限制无密码密钥
  • 为了进行文件传输,在接收机器上使用 rsync 编写一个脚本来完成它,以便远程访问可以是只读的
  • 如果这意味着需要从远程机器访问回启动机器,请使用ssh-agent而不是创建第二个无密码密钥