SSH keygen: 初学者的完美指南
SSH(Secure Shell)是安全连接远程服务器的必备工具。相比使用密码,SSH密钥认证方式提供了更强的安全性,是每个开发者需掌握的知识。本文将从SSH密钥生成的基本概念到实际使用方法,以初学者的视角简单而详细地进行讲解。
为什么需要SSH密钥生成?
传统的密码方式在输入过程中容易被暴露,并且易受暴力破解攻击。SSH密钥通过使用一对公钥(Public Key)和私钥(Private Key)来解决这些问题。
- 私钥(Private Key): 需安全保存在用户的计算机上,绝不可暴露在外。只有拥有这个密钥才能连接到服务器。
- 公钥(Public Key): 注册到要连接的服务器上,公开后不会造成安全问题。
在SSH连接时,服务器使用用户的公钥加密认证请求,用户计算机的私钥如果成功解密,该连接即被允许。这样就可以安全通信而不必交换密码。
SSH密钥生成方法: ssh-keygen
命令
生成SSH密钥的最基本命令是ssh-keygen
。打开终端并输入以下命令。
ssh-keygen
执行该命令后,会出现几个问题。我们逐一来看。
-
Enter file in which to save the key (/home/youruser/.ssh/id_rsa):
-
这是询问生成的密钥文件保存路径的问题。如果没有特别的原因,建议使用默认路径
.ssh/id_rsa
。只需按Enter
即可。
-
-
Enter passphrase (empty for no passphrase):
-
询问是否为私钥设置密码的问题。为了增强安全性,强烈建议设置密码。 如果设置密码,即使私钥泄露,也无法使用,增加了双重安全性。注意输入时终端不会显示任何内容,输入完成后按
Enter
。
-
-
Enter same passphrase again:
- 再次输入前面输入的密码以进行确认。
-
预期结果:
Your identification has been saved in /home/youruser/.ssh/id_rsa
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@yourmachine
The key's randomart image is:
+---[RSA 3072]----+
| .=*o. |
| . +.E+ |
| . o.=. . |
| o . o |
| . S . |
| . . |
| . |
| |
| |
+----[SHA256]-----+
密钥生成完成后,将在~/.ssh/
目录下生成两个文件。
id_rsa
: 私钥(Private Key)id_rsa.pub
: 公钥(Public Key)
RSA与Ed25519:选择哪种方式?
生成SSH密钥时,可以使用ssh-keygen
命令的-t
选项指定密钥的加密方式。主要使用的方式是RSA和Ed25519。
1. RSA方式 (-t rsa
)
- 自SSH初期以来广泛使用的方式。
- 其稳定性已被验证,并且与大多数系统兼容。
- 可以指定密钥长度,通常建议使用
4096
位。- 示例:
ssh-keygen -t rsa -b 4096
- 示例:
2. Ed25519方式 (-t ed25519
)
- 更现代的加密方式,基于Curve25519椭圆曲线加密。
- 相比RSA,使用更短的密钥长度提供相同或更高的安全性。
- 密钥生成和认证速度更快,使用的资源更少。
- 虽然大多数现代系统支持,但在非常旧的系统上可能不兼容。
- 示例:
ssh-keygen -t ed25519
- 示例:
推荐方式及理由
在目前的情况下,如果没有特别的兼容性问题,强烈推荐使用Ed25519方式。
- 更好的安全性:即使使用较短的密钥长度也提供强大的安全性,对于暴力攻击等更加抗击。
- 更快的性能:密钥生成和认证过程更高效。
- 简洁性:与RSA不同,不必考虑密钥长度,可以简单地生成。
Ed25519密钥生成示例
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -C "my_server_ssh_key"
-t ed25519
: 以Ed25519方式生成密钥。-f ~/.ssh/id_ed25519_my_server
: 密钥文件的名称指定为id_ed25519_my_server
。(可为了与现有id_rsa
区分,使用不同的名称)-C "my_server_ssh_key"
: 为密钥添加备注(Comment)。为了更容易了解该密钥的用途,建议命名。
预期结果:
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): # 输入密码(推荐)
Enter same passphrase again: # 确认密码
Your identification has been saved in /home/youruser/.ssh/id_ed25519_my_server
Your public key has been saved in /home/youruser/.ssh/id_ed25519_my_server.pub
The key fingerprint is:
SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy my_server_ssh_key
The key's randomart image is:
+--[ED25519 256]--+
| .+=+ |
| . oE B |
| o + O |
| . + + |
| o . S |
| . = . |
| . B + |
| . * = o |
|+ o . = . |
+----[SHA256]-----+
现在你应该理解了生成和管理SSH密钥的基本方法。将生成的公钥(id_ed25519_my_server.pub
或id_rsa.pub
)注册到远程服务器的~/.ssh/authorized_keys
文件中,即可以无密码安全连接。下一篇文章将详细探讨如何将生成的SSH密钥注册到服务器并使用。
如有疑问,请随时在评论中提问!
目前没有评论。