公钥和私钥是成对生成的,用于加密和解密数据。它们是通过SSH密钥生成工具(如ssh-keygen
)创建的,生成后分别存放在客户端和服务器上。
公钥和私钥的来源及放置:
-
生成密钥对:
- 可以使用命令
ssh-keygen
在客户端生成公钥和私钥。 - 生成的过程中,用户可以选择密钥类型(如RSA、ECDSA等)和密钥长度,并设置一个用于保护私钥的密码短语(可以为空)。
- 可以使用命令
-
存放位置:
- 私钥(Private Key):保存在客户端,一般位于用户主目录下的隐藏文件夹中,路径为
~/.ssh/id_rsa
或类似的文件。这个文件非常重要,不能泄露,因为任何人拿到它就可以以你的身份登录服务器。 - 公钥(Public Key):需要放在服务器端,通常添加到服务器上的
~/.ssh/authorized_keys
文件中。服务器利用这个公钥来验证客户端的连接。
- 私钥(Private Key):保存在客户端,一般位于用户主目录下的隐藏文件夹中,路径为
-
配置过程:
- 客户端生成密钥对后,将公钥手动或自动上传到服务器的
authorized_keys
文件中。 - 当客户端尝试连接服务器时,服务器使用存储的公钥验证客户端的私钥,确保客户端是合法的用户。
- 客户端生成密钥对后,将公钥手动或自动上传到服务器的
-
密钥的安全性:
- 私钥要保存在本地,且权限应设置为仅用户可读(例如:
chmod 600 ~/.ssh/id_rsa
)。 - 公钥可以公开共享,但只能用于验证私钥而不能反向推导出私钥。
- 私钥要保存在本地,且权限应设置为仅用户可读(例如:
生成和上传密钥示例:
# 在客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 将公钥上传到服务器
ssh-copy-id user@server
这种密钥对的机制确保了即使在不安全的网络环境中,远程连接仍然可以保持安全。
在SSH连接中,客户端和服务器的角色是相对的,具体定义如下:
客户端和服务器的定义:
-
客户端(Client):
- 客户端是发起SSH连接请求的一方,通常是你的本地电脑或设备。你在客户端上执行
ssh user@host
命令来远程登录到服务器。 - 例如:你的个人电脑、笔记本电脑、或其他设备。
- 客户端是发起SSH连接请求的一方,通常是你的本地电脑或设备。你在客户端上执行
-
服务器(Server):
- 服务器是接收并响应SSH连接请求的一方,通常是运行SSH服务的远程机器,如云服务器、数据库服务器、或者其他远程主机。
- 服务器会通过已存储的公钥来验证来自客户端的连接请求。
举例说明:
- 假设你在你的笔记本电脑上运行
ssh-keygen
生成了一对密钥,这时你的笔记本电脑就是客户端。 - 当你用这个客户端连接到远程的Linux服务器时,那个Linux机器就是服务器。
客户端和服务器之间的密钥存放:
- 客户端:保存的是私钥(例如:
~/.ssh/id_rsa
),它用来解密服务器的认证请求。 - 服务器:保存的是公钥,存放在
~/.ssh/authorized_keys
文件中,用于验证连接的客户端是否拥有相应的私钥。
这套机制确保了客户端和服务器之间的连接是安全且加密的。
安全保障
私钥=私人钥匙:只掌握在自己手中,确保别人无法冒充自己。
公钥=公开的锁:别人可以用它保护信息,但不能用它破解信息。
私钥用来解密(开锁),公钥用来加密(上锁)。
通过这种方式,数据在传输过程中能够保证只有授权的客户端才能访问。