ssh中公钥和私钥怎么生成
ssh-keygen
是一个用于生成 SSH 密钥对的工具,通常用于 SSH(Secure Shell)协议的密钥认证。SSH 密钥对包括一个公钥和一个私钥,用于增强 SSH 登录的安全性,避免使用明文密码登录服务器。以下是关于 ssh-keygen
的详细说明:
1. SSH 密钥对的作用
-
公钥(Public Key):可以公开分发给服务器或其他客户端。服务器会将公钥存储在用户的授权文件(如
~/.ssh/authorized_keys
)中。 -
私钥(Private Key):必须严格保密,只有用户自己保存。私钥用于解密服务器发送的加密信息,从而验证用户的身份。
-
工作原理:
-
当客户端尝试通过 SSH 登录服务器时,服务器会向客户端发送一个加密的挑战信息。
-
客户端使用私钥解密该挑战信息,并将解密后的结果发送回服务器。
-
服务器验证解密结果是否正确,从而确认客户端的身份。
-
2. 使用 ssh-keygen
生成密钥对
基本命令
bash复制
ssh-keygen
-
默认行为:
-
默认情况下,
ssh-keygen
会生成一个 2048 位的 RSA 密钥对。 -
公钥保存在
~/.ssh/id_rsa.pub
文件中。 -
私钥保存在
~/.ssh/id_rsa
文件中。
-
常用选项
-
指定密钥类型:
-
-t
:指定密钥类型,如rsa
、dsa
、ecdsa
、ed25519
等。-
RSA:最常用的密钥类型,推荐使用 2048 位或更高。
-
Ed25519:一种较新的密钥类型,安全性更高,推荐使用。
-
示例:
bash复制
ssh-keygen -t rsa -b 2048 ssh-keygen -t ed25519
-
-
-
指定文件名:
-
-f
:指定密钥文件的保存路径。-
示例:
bash复制
ssh-keygen -t rsa -b 2048 -f ~/.ssh/my_custom_key
这会生成
~/.ssh/my_custom_key
(私钥)和~/.ssh/my_custom_key.pub
(公钥)。
-
-
-
设置密码(可选):
-
在生成密钥对时,系统会提示用户输入一个密码(passphrase)。如果设置了密码,每次使用私钥时都需要输入该密码,从而增加安全性。
-
如果不输入密码,直接按回车键,则私钥无需密码即可使用。
-
3. 将公钥添加到服务器
生成密钥对后,需要将公钥添加到目标服务器的 ~/.ssh/authorized_keys
文件中,以便使用密钥登录。
方法 1:手动复制
-
在本地机器上查看公钥内容:
bash复制
cat ~/.ssh/id_rsa.pub
-
将公钥内容复制到服务器的
~/.ssh/authorized_keys
文件中:bash复制
ssh user@server mkdir -p ~/.ssh chmod 700 ~/.ssh echo "your_public_key_content" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
方法 2:使用 ssh-copy-id
ssh-copy-id
是一个方便的工具,可以自动将公钥复制到服务器的 ~/.ssh/authorized_keys
文件中。
bash复制
ssh-copy-id user@server
-
运行该命令时,系统会提示输入服务器的密码。输入密码后,公钥将自动添加到服务器。
4. 使用密钥登录服务器
完成上述步骤后,可以使用密钥登录服务器:
bash复制
ssh -i ~/.ssh/my_custom_key user@server
-
-i
:指定私钥文件路径。 -
如果私钥文件是默认路径(如
~/.ssh/id_rsa
),则无需指定-i
参数。
5. 注意事项
-
保护私钥:私钥文件(如
~/.ssh/id_rsa
)必须严格保密,建议设置文件权限为600
:bash复制
chmod 600 ~/.ssh/id_rsa
-
备份密钥:建议将私钥文件备份到安全的地方,以防丢失。
-
密钥类型选择:推荐使用
ed25519
或高位数的RSA
密钥,以确保安全性。
通过使用 ssh-keygen
生成密钥对并配置密钥登录,可以显著提高 SSH 登录的安全性,避免使用明文密码带来的风险。