在两个远程节点之间建立无密码 SSH 是一个坏主意吗?

在两个远程节点之间建立无密码 SSH 是一个坏主意吗?

我的场景是,我的 shell 脚本在服务器 A 上以用户“X”的身份执行,需要通过 SSH 以相同的用户“X”连接服务器 B 并执行一些任务,同样,我还有几台机器服务器 C、服务器 D 等来执行相同的任务。

我计划ssh-keygen -t rsa在用户“X”主目录中的服务器 A 上生成无密码.ssh,然后将ssh-copy-id公钥复制到服务器 B、C 等……并将其存储在相应.ssh路径中的 authorizedkeys 中。

经过此设置后,我的 shell 脚本运行良好,我能够执行所有任务。

但现在我听说在服务器 A 上保留用户“X”的未加密私钥存在潜在的安全风险。我无法加密它的密码,因为我需要在服务器 A 和 B、C、D 等之间建立无密码的 SSH 连接。

这真的是糟糕的方法吗?如何确保安全?还有其他安全的方法可以实现这一点吗?

答案1

如果您的目标是使此过程自动化,以便服务器 A 可以自动登录其他服务器并在其上执行任务,那么这没问题。许多环境使用 SSH 密钥来实现此目的,而且它相当安全。

您应该确保对私钥文件的访问是有限的:它应该由非特权用户拥有,理想情况下是可以访问一些其他资源的用户,并使用 600 个权限进行保护。

如果您的系统支持,我也会更喜欢 Ed25519 密钥而不是 RSA 密钥(即ssh-keygen -t ed25519)。Ed25519 密钥提供与 3072 位 RSA 密钥相当的安全性,并受到 Mozilla 的推荐。与可以与弱 SHA-1 算法一起使用的 RSA 密钥不同,Ed25519 密钥始终可以安全地对数据进行签名。

如果您非常担心以这种方式使用 SSH 密钥的安全性,则可以定期轮换密钥,使用 OpenSSH 证书颁发机构可能更容易做到这一点,因为这样的 CA 可以在有限的有效期内签署密钥。

如果您的目标是让用户能够登录并在服务器 A 上运行可以在其他服务器上运行的命令,那么您可能只想转发您的代理,您可以使用 来完成ssh -A

相关内容