ssh 密钥问题

ssh 密钥问题

我对生成 ssh 访问密钥有一些疑问:

(1) 假设有两台计算机运行 ssh 服务器服务,我在计算机 A 上生成了一对密钥文件,并将公共文件复制到计算机 B。这是否只是单向密钥:我们只给了计算机 A 访问计算机 B 的权限,而没有给计算机 B 访问计算机 A 的权限?如果我现在想从计算机 B ssh 到计算机 A,我必须在计算机 B 上生成另一对密钥文件,并将公共文件复制到计算机 A 吗?

(2)如果我想将单台本地计算机连接到多台远程服务器,是只在本地生成一次公共的密钥文件,然后将相同的公共文件复制到远程服务器,还是在本地为不同的远程服务器生成不同的密钥文件?

(3)如果我想将多台本地计算机连接到一台远程服务器,在将公共文件从不同的本地计算机复制到远程服务器时,是将它们合并到单个authorized_keys文件中,还是将它们存储在不同的authorized_keys文件中?

(4) 如果有多台服务器通过 NFS 等方式共享同一个文件系统,那么如何生成密钥并安排密钥文件以便从一台服务器访问另一台服务器?此外,如何生成密钥并安排密钥文件以便本地计算机访问任何一台服务器?

以上所有机器都是Linux。请在回复中提供示例和命令,以便我更好地了解如何解决问题。

感谢致敬!

答案1

  1. 是的,情况确实如此。拥有密钥私钥的机器可以对拥有公钥的机器进行身份验证。当然,您可以在两台或更多台机器上使用相同的私钥,但如果密钥上没有字符串密码,则不应对您不 100% 信任的服务器(例如外部共享服务器)执行此操作(再次强调,无论如何都不建议使用无密码密钥)。

  2. 在许多服务器上使用相同的公钥是很常见的,就像使用公钥+私钥来签署电子邮件一样(每个人通常都使用相同的公钥来检查来自一个私钥的签名)——上面没有提到不接受。例如,我的 me@homemachine 密钥可以让我登录到我的家庭服务器、我的远程服务器和几个虚拟机。虽然我有一组不同的 me@homeserver 密钥(因为上面的注释 1),但这些密钥也可用于在其他地方使用一系列帐户对我进行身份验证。也就是说,如果您愿意,没有什么可以阻止您为您持有的每个用户帐户拥有多个私钥。

  3. 给定目标帐户的所有授权密钥都存在于一个authorized_keys文件中。

  4. 那要看情况。您的主目录,或者说所有内容,是否位于共享 (NFS) 资源上?

http://novosial.org/openssh/publickey-auth/是在回答之前相关问题时快速搜索后出现的资源,虽然它可能没有涵盖您的最后一点,但它似乎也与此相关。假设您使用 OpenSSH(您很可能没有使用),则示例命令将与 Linux 相关。

答案2

(1)假设有两台计算机都运行着ssh服务器服务,我在计算机A上生成了一对密钥文件,并将公钥文件复制到计算机B上,这是否只是一个单向密钥:我们只给了计算机A访问计算机B的权限,而没有给计算机B访问计算机A的权限?

是的。

如果我现在想从计算机 B ssh 到计算机 A,我必须在计算机 B 上生成另一对密钥文件并将公共文件复制到计算机 A 吗?

是的(尽管如果 A 和 B 完全信任彼此,您可以使用与上面相同的密钥文件)。

(2)如果我想将单台本地计算机连接到多台远程服务器,是只在本地生成一次公共的密钥文件,然后将相同的公共文件复制到远程服务器,还是在本地为不同的远程服务器生成不同的密钥文件?

虽然两者都可以工作,但没有理由使用多个密钥文件;所以这是您的第二种选择。

(3)

是的,您将所有密钥合并到一个authorized_keys文件中。

(4) 如果有多台服务器通过 NFS 等方式共享同一个文件系统,那么如何生成密钥并安排密钥文件以便从一台服务器访问另一台服务器?此外,如何生成密钥并安排密钥文件以便本地计算机访问任何一台服务器?

NFS 对 SSH 来说并不重要;文件必须位于正确的位置。生成密钥也是如此。

答案3

  1. 计算机'A' 生成的一个密钥对可用于登录其他几台计算机。
    但是,您可以将密钥对从A'.ssh'目录复制到另一台计算机'B',然后从那里使用它(登录您允许 ' 使用A'这些凭据访问的所有计算机)。
    由于您现在已在两台计算机之间共享私人数据,因此这会使访问不太安全。但是,如果这不是负担,它可能会起作用。
  2. 正如我上面所描述的,您可以使用单个密钥对'A'来访问所需数量的远程机器,方法是使用每台机器上的公钥授权访问。
  3. 'authorized_keys'文件可以有多行授权行(公钥),每行一行。
  4. 当您在多台计算机之间共享'home'空间时('.ssh'因此,当您登录时,目录本身就在这些计算机之间共享),您只需要一个密钥对即可在此计算机池之间共享访问权限。将公钥放入此'.ssh“.

一些参考资料,

  1. OpenSSH 公钥认证
  2. 无需密码的 SSH
  3. SSH 用户身份(安全焦点)

更新:

  • 剑桥大学帮助页面有一个示例 authorized_keys 列表。
  • 我认为不同的文件用于存储不同的密钥类型。
    例如,'authorized_keys' 文件用于存储 RSA 密钥,而'
    文件'authorized_keys2用于存储 DSA 密钥。
    有一个SecurityFocus 文章它描述了这些文件以及其他内容。

相关内容