在 SSH 中使用私钥和公钥
最编程
2024-06-26 19:21:14
...
在 SSH(Secure Shell)中,密钥对用于加密和身份验证,保证了远程会话的安全。一个密钥对包括两部分:公钥和私钥。它们有不同的作用和特性:
私钥
- 私钥是一个用户保密的密钥,它绝不能被泄露或分享给其他人。
- 保存在用户的本地计算机上,用于 SSH 进行安全的认证。
- 通常由 SSH 客户端软件生成并带有密码保护(可选)。
- 在 SSH 登录过程中,私钥被用来对服务端发起的挑战进行签名,进而证明客户端确实拥有对应的私钥。
公钥
- 公钥可以安全地分享给任何人,没有泄露风险。
- 需要被放置在远程服务器上用户账号的
~/.ssh/authorized_keys
文件中。 - 当有客户端尝试连接服务器时,服务器会使用公钥来验证这个客户端发送的签名是否合法,以此确认远程登录用户持有对应的私钥。
SSH 密钥认证过程
- 客户端请求连接到 SSH 服务器。
- 服务器检查客户端是否提供了一个公钥。
- 如果客户端提供了一个公钥,服务器使用这个公钥生成一个随机数并发送给客户端作为挑战(challenge)。
- 客户端使用私钥对这个挑战进行签名,然后将签名发送回服务器。
- 服务器用公钥验证这个签名。如果验证成功,说明客户端持有匹配的私钥,服务器允许客户端登录。
在实际操作中,用户首先需要在本地计算机上使用 SSH 客户端生成密钥对,然后将生成的公钥放置到想要访问的服务器的相应账户下。私钥应该妥善保存在本地计算机上,并且应尽可能设置密码保护,避免未授权访问。
总的来说,公钥可以看作锁,而私钥就是打开这把锁的钥匙。公钥可以放在服务器上,谁都可以看到(用于上锁),但只有拥有私钥的人才能解开(认证成功)。在 SSH 安全模型中,所用密钥对的加密算法通常是 RSA 或 ECDSA 等。
SSH 公钥和私钥的生成通常通过使用 ssh-keygen
命令行工具进行。当生成一个密钥对时,公钥和私钥会自动具有绑定的关系,因为它们是同时生成的,并且是数学上互相对应的。以下是生成和使用密钥对的一般步骤:
生成 SSH 密钥对:
- 打开终端。
- 输入命令
ssh-keygen
并按回车键。 - 系统将会提示你选择保存密钥对的位置。如果接受默认位置(通常是
~/.ssh/id_rsa
),直接按回车键。 - 系统会问你是否要设置一个密码保护私钥。如果想要设置密码(这一步是可选的,但为了安全性,建议设置),输入你的密码并确认;否则直接按回车键。
- 密钥对生成完毕后,私钥保存在了指定位置
推荐阅读
-
使用RSA 2048位密钥对进行前端jsencrypt公钥加密和后端Java私钥解密
-
如何使用Xshell设置SSH无密码登录 - 公钥与私钥的配置方法
-
如何在 Windows Terminal 中设置并使用 SSH 公钥进行登录?
-
使用公钥/私钥让 putty (ssh) 自动登录(在 Linux 系统中,ssh 使用密钥自动登录)
-
ssh 公钥和私钥原则
-
了解 SSH 私钥和公钥加密
-
了解 SSH 私钥和公钥加密
-
如何使用私钥和公钥加密
-
关于公钥和私钥,以及使用它们进行加密和身份验证
-
了解公钥和私钥 - 公钥加密算法又称非对称加密算法,使用不同的密码进行加密和解密,其中一个用于公钥,另一个用于私钥: 公钥和私钥成对使用 公钥称为公钥,私钥称为私钥。 用公钥加密的数据只能用相应的私钥解密 用私钥加密的数据只能用相应的公钥解密。 如果数据可以用公钥解密,则必须用相应的私钥加密。 如果数据可以用私钥解密,则必须用相应的公钥加密。 公钥和私钥是相对的,没有规定哪一个必须是公钥或私钥。 第二,实现数据的安全传输 要实现数据的安全传输,当然要对数据进行加密。 如果使用对称加密算法,加密和解密使用同一个密钥,除了自己要保存外,对方也必须知道密钥才能解密数据。如果把密钥传给对方,就有可能泄露密码。所以我们使用非对称算法,过程如下: 首先,接收方生成一对密钥,即私钥和公钥; 然后,接收方将公钥发送给发送方; 发送方用收到的公开密钥加密数据并发送给接收方; 接收方收到数据后使用自己的私钥解密。 由于在非对称算法中,用公钥加密的数据必须用相应的私钥解密,而私钥只有接收方知道,这就确保了数据传输的安全性。 第三,信息的数字签名 除了确保数据的安全传输,公钥系统的另一个用途是对数据进行签名。通常,"数字签名 "用于验证发送者的身份,帮助保护数据的完整性。 例如,发送者 A 想向所有人发送一些信息,他用自己的私人密钥对信息进行了加密,即签名。这样,每个收到数据的人都能用发送者的公开密钥验证数据,并确认数据是由 A 发送的(因为只有 A 用他的私人密钥签署了数据,所以无法验证发送者的身份)。(因为只有用 A 的私钥签名的信息才能用公钥解密)。使用数字签名可以确认两件事: 保证信息是由签名者本人签名发送的,签名者无法否认或难以否认。 保证信息从发出到收到都没有被以任何方式修改过。 之所以能确认这两点,是因为公钥的解密必然要有相应的私钥加密,而私钥只有签名者持有。 四、公钥算法的缺陷 在现实中,公钥机制也有其缺点,那就是效率很低,比常用的私钥算法(如 DES 和 AES)慢上一两个数量级都有可能。因此,它不适合对大量原始信息进行加密。为了兼顾安全性和效率,我们通常会将公钥算法和私钥算法结合起来使用: 首先,发送方使用对称算法加密原始信息。 接收方使用公钥机制生成一对密钥,一个是公钥,一个是私钥。 接收方将公钥发送给发送方。 发送方用公钥加密对称算法的密钥,然后发送给接收方。 接收方用私人密钥解密对称算法的密钥。 发送方将加密后的原始信息发送给接收方。 接收方使用对称算法的密钥解密信息。 摘要