首页 > 其他分享 >SSH中私钥和公钥的使用

SSH中私钥和公钥的使用

时间:2024-04-02 13:34:12浏览次数:20  
标签:公钥 私钥 SSH 服务器 ssh 客户端

在 SSH(Secure Shell)中,密钥对用于加密和身份验证,保证了远程会话的安全。一个密钥对包括两部分:公钥和私钥。它们有不同的作用和特性:

私钥

  • 私钥是一个用户保密的密钥,它绝不能被泄露或分享给其他人。
  • 保存在用户的本地计算机上,用于 SSH 进行安全的认证。
  • 通常由 SSH 客户端软件生成并带有密码保护(可选)。
  • 在 SSH 登录过程中,私钥被用来对服务端发起的挑战进行签名,进而证明客户端确实拥有对应的私钥。

公钥

  • 公钥可以安全地分享给任何人,没有泄露风险。
  • 需要被放置在远程服务器上用户账号的 ~/.ssh/authorized_keys 文件中。
  • 当有客户端尝试连接服务器时,服务器会使用公钥来验证这个客户端发送的签名是否合法,以此确认远程登录用户持有对应的私钥。

SSH 密钥认证过程

  1. 客户端请求连接到 SSH 服务器。
  2. 服务器检查客户端是否提供了一个公钥。
  3. 如果客户端提供了一个公钥,服务器使用这个公钥生成一个随机数并发送给客户端作为挑战(challenge)。
  4. 客户端使用私钥对这个挑战进行签名,然后将签名发送回服务器。
  5. 服务器用公钥验证这个签名。如果验证成功,说明客户端持有匹配的私钥,服务器允许客户端登录。

在实际操作中,用户首先需要在本地计算机上使用 SSH 客户端生成密钥对,然后将生成的公钥放置到想要访问的服务器的相应账户下。私钥应该妥善保存在本地计算机上,并且应尽可能设置密码保护,避免未授权访问。

总的来说,公钥可以看作锁,而私钥就是打开这把锁的钥匙。公钥可以放在服务器上,谁都可以看到(用于上锁),但只有拥有私钥的人才能解开(认证成功)。在 SSH 安全模型中,所用密钥对的加密算法通常是 RSA 或 ECDSA 等。

 

SSH 公钥和私钥的生成通常通过使用 ssh-keygen 命令行工具进行。当生成一个密钥对时,公钥和私钥会自动具有绑定的关系,因为它们是同时生成的,并且是数学上互相对应的。以下是生成和使用密钥对的一般步骤:

生成 SSH 密钥对:

  1. 打开终端。
  2. 输入命令 ssh-keygen 并按回车键。
  3. 系统将会提示你选择保存密钥对的位置。如果接受默认位置(通常是 ~/.ssh/id_rsa),直接按回车键。
  4. 系统会问你是否要设置一个密码保护私钥。如果想要设置密码(这一步是可选的,但为了安全性,建议设置),输入你的密码并确认;否则直接按回车键。
  5. 密钥对生成完毕后,私钥保存在了指定位置,而公钥(通常是私钥文件名后加 .pub 扩展,例如 ~/.ssh/id_rsa.pub)也会在同一目录下生成。

将公钥添加到远程服务器:

  1. 需要将你的公钥内容复制到远程服务器上你账户的 ~/.ssh/authorized_keys 文件中。可以通过以下步骤完成:

首先,在本地终端查看和复制你的公钥内容:

     cat ~/.ssh/id_rsa.pub
  • 登录到你的远程服务器。
  • 打开或创建 ~/.ssh/authorized_keys 文件,并将公钥内容粘贴进去:
     echo your_public_key_string >> ~/.ssh/authorized_keys
 把 `your_public_key_string` 替换为实际的公钥内容。

2. 确保 ~/.ssh 目录和 authorized_keys 文件的权限设置正确:

  • ~/.ssh 目录的权限应该是 700
  • ~/.ssh/authorized_keys 文件的权限应该是 600

绑定关系:

生成密钥对时,它们就已经有了绑定关系,即:

  • 私钥包含了独一无二的私有秘密信息,不能泄露给其他人。
  • 公钥是从私钥中推导出来的,可以安全地公开和分发。

虽然公钥可以被任何人知道,但只有持有相关联的私钥的人才能验证由公钥加密的信息。

当进行 SSH 连接时,服务器会使用公钥加密一段信息,然后发送给客户端。客户端必须使用私钥来解密这段信息并正确响应,这样才能证明客户端拥有与公钥配对的私钥,从而完成验证过程。

简而言之,公钥和私钥的关系是通过特定的加密算法(如 RSA、ECDSA)自动生成的,一旦生成就是固定的一对。

要在 Ubuntu 20.04 LTS 创建一个新用户并为该用户设置 SSH 私钥,你可以通过以下步骤操作:

1. 新增用户
打开终端并使用 adduser 命令来创建新用户,如下:

   sudo adduser newusername

跟随提示完成新用户的创建过程,系统会要求你设置密码和一些附加信息。

2. 为新用户创建 SSH 目录
切换到新用户,然后在其主目录下创建 .ssh 目录和 authorized_keys 文件:

   sudo su - newusername
   mkdir ~/.ssh
   touch ~/.ssh/authorized_keys
   chmod 700 ~/.ssh
   chmod 600 ~/.ssh/authorized_keys

注意:使用 chmod 命令设置正确的权限是很重要的,它可以防止未授权的用户访问 SSH 密钥。

3. 复制公钥到 authorized_keys 文件
将生成的或预先存在的 SSH 公钥复制到 ~/.ssh/authorized_keys 文件中。可以使用如下命令:

   echo your_public_key_string >> ~/.ssh/authorized_keys

替换 your_public_key_string 为你的实际公钥内容。

4. 设置 SSH 私钥
在客户端计算机(即你要从中远程登录的计算机)上,如果你之前没有生成过 SSH 密钥,可以使用以下命令生成新的密钥对:

   ssh-keygen

之后在客户端计算机上找到你的公钥(默认位置为 ~/.ssh/id_rsa.pub),并使用上面的命令步骤把它添加到服务器上新用户的 authorized_keys 文件里。

5. 测试 SSH 连接
现在从你的客户端计算机尝试通过 SSH 登录到服务器:

   ssh newusername@server_ip_address

替换 newusername 为你创建的用户名称,server_ip_address 为 Ubuntu 服务器的 IP 地址。

如果 SSH 密钥生成过程中设置了密码,那么你第一次尝试 SSH 连接时,系统将提示你输入该密码。

请确保服务器的 SSH 服务已启动并运行,服务器的防火墙设置允许通过 SSH 默认端口 22(或者你自定义设置的其他端口)的连接。一旦一切设置完成,你应该能够无需密码,仅使用 SSH 秘钥登录到服务器上的新用户。

标签:公钥,私钥,SSH,服务器,ssh,客户端
From: https://blog.csdn.net/zhu_superman/article/details/137266694

相关文章

  • 在Linux中,什么是SSH?它是如何工作的?
    SSH(SecureShell)是在Linux及其他类Unix系统中广泛应用的一种网络协议,主要用于安全的远程登录和命令执行。SSH的设计目标是在不安全的网络环境下,为用户提供数据机密性、完整性以及操作认证等安全保障。SSH是如何工作的:SSH协议采用客户端-服务器架构,其工作流程大致分为以下几个步......
  • Vmware虚拟机远程SSH连接失效解决方法及分析过程
    问题描述系统为CentOS764位一向能够正常连接在某次使用FinalShell进行远程SSH连接时突然无法连接对问题原因猜测及尝试1.dns解析失效发现显示DNS无法解析,可以得知是使用了主机名登录,而主机名无法登录.遂查看host文件.host文件因不知名原因被清空,重新恢复后该问......
  • Linux——ssh登录很慢解决方法
    1、背景在同一机房中,有多台安装了CentOS7操作系统的服务器,它们的配置除了IP地址不同外基本相同。这些服务器的资源利用率都不高,但在使用SSH连接时,发现有几台服务器连接速度较慢,可能需要等待30-60秒才能提示输入密码,但一旦连接成功后,速度就恢复正常。2、SSH登陆慢原因这种......
  • linux ssh配置radius认证
    使用pam_radius实现1、下载及安装Pam_radius2、修改ssh配置以及ssh服务的pam文件3、搭建radius服务器下载及安装Pam_radius1、安装依赖sudoyuminstallgccpampam-develmake-y2、前往freeradius网站下载pam_radius,链接如下https://freeradius.org/sub_projects/3、......
  • 同一个主机配置多个SSH key
    使用git时,我们可能一个git客户端使用多个git服务器,比如github,自建gitlab,gitee,为了防止提交混乱,所以需要一一对应生成公私钥。第一步:使用ssh-keygen生成多对密钥对,比如:ssh-keygen-trsa-C'随意注解三者不一样就好'-f~/.ssh/id_rsa_githubssh-keygen-trsa-C'......
  • Linux 限制root用户远程登录-ssh
    1.首先执行备份:#cp-p/etc/ssh/sshd_config/etc/ssh/sshd_config_bak2.确保系统存在除root之外的其他用户,防止设备配置完之后用户无法远程访问),若不存在其他用户,则使用如下命令添加用户并配置强密码:#useraddusername#passwdusername3.配置禁止root用户直接远程登录系统......
  • 解决ubuntu22.04的ssh问题--userauth_pubkey: key type ssh-rsa not in PubkeyAccepte
    问题在我新安装了一台ubuntu22.04的服务器时,配置远程服务器正常情况下,只要把握本机的公钥写到被远程主机对应用户的.ssh/authorized_keys文件中就好了但是,今天发现,虽然设置进去了,但是远程还是提示需要密码但是并不是所有的主机是这样的,同样是ubuntu22.04的服务器还是能够免......
  • ssh实现linux机器之间的互相访问和命令控制
    在Linux系统之间互相访问并通过命令控制可以通过多种方式实现,其中最常用的方法是使用SSH(SecureShell)协议。SSH是一个提供加密的网络协议,通过它可以安全地在不安全的网络上进行远程登录和其他网络服务。以下是使用SSH实现Linux系统之间互相访问的基本步骤:1.安装SSH服务在两台Li......
  • Ubuntu中如何配置ssh,连接xshell
    这里演示Ubuntu中配置ssh服务,并且使用xshell连接Ubuntu中的root用户1.如果之前没有配置过root密码的话这里可以配置一下root的密码,如果之前配置过,直接登录进去即可。sudopasswdroot然后填写自己的登录密码,这时密码不会显示,但确实填进去了,然后配置自己的root密码,然后确定......
  • 云计算02笔记---远程连接服务ssh 以及cp mv rm cd mkdir echo 等Linux常用命令
    远程连接服务ssh语法格式:ssh用户名@ip地址【-p指定端口号】例如:[email protected]默认端口号:22修改端口号:vim/etc/ssh/sshd_config编辑其中一行#port22改为port2222删去了注释符号#且改变端口号拷贝命令cpcp位置1位置2从位置1复制到位置......