SSH公私钥连接(Git、Linux服务器)

发布于:2025-06-15 ⋅ 阅读:(22) ⋅ 点赞:(0)

前言

SSH (Secure Shell) 是一种网络协议,用于在不安全的网络中提供安全的远程登录和其他网络服务。以下是关于 SSH 连接的核心信息

  • SSH 连接的基本原理:SSH 使用非对称加密技术(公钥和私钥)验证身份,确保通信内容加密。流程如下

    1. 客户端发起连接:请求与服务器建立 SSH 会话。
    2. 服务器发送公钥:服务器将自己的公钥发送给客户端。
    3. 验证服务器身份:客户端验证服务器的真实性(通过检查公钥指纹或 CA 证书)。
    4. 身份验证:客户端通过以下方式证明自己的身份:
      • 密码验证:直接输入密码。
      • 公钥验证:客户端用私钥签名,服务器用保存的公钥验证。
    5. 建立加密通道:双方使用会话密钥加密通信内容。
  • 密钥对的生成原理

    • 私钥:是通过随机数生成的,属于绝对机密信息。
    • 公钥:由私钥经过特定的数学算法推导得出,所有人都可以获取。
    • 不可逆性:无法通过公钥反向计算出私钥,这是加密体系安全性的关键所在。
  • 连接流程图如下

    在这里插入图片描述

  • 这里主要讲解和使用公钥验证的步骤,下面我挑两个功能来演示

Git使用SSH拉取代码

  • 我们在拉去Git仓库时,可以看到Web UI会提供两种克隆方式
    1. 使用http + 账号 + 密码克隆
    2. 使用SSH克隆
  • 当然,我们大部分人肯定都会使用第一种方式,方便,简单。但是有时候我们克隆的环境不会把我们的账号密码保存到凭据管理中,导致我们每次提交代码都需要输入账号+密码,非常的麻烦。那我们就可以考虑使用SSH的方式来避免这种困扰(当然,也会更加的安全)
  • 下面我以windows使用SSH拉取Git仓库代码为例演示

1、本地生成公私钥

  • 我们可以使用windows自带的命令生成,打开 **Windows PowerShell** 或者 **Git Bash**

  • 通过命令 ssh-keygen 生成 SSH Key

    ssh-keygen -t ed25519 -C "Gitee SSH Key"
    
    • -t ed25519 指定密钥类型为 Ed25519(推荐的现代加密算法)
    • -C 添加注释,方便识别该密钥的用途。
  • 下面我们连续三个回车确认即可,输出如下

    在这里插入图片描述

  • 公私钥即生成完毕

2、查看生成的公私钥

  • 上面步骤执行完成后,根据第一步的回车路径,即可查找到生成的公私钥文件

    • id_ed25519:私钥文件,放在客户端保存
    • id_ed25519.pub:公钥文件,可以公开,使用记事本等工具查看

    在这里插入图片描述

3、配置公钥

  • 接下来,我们要把公钥配置到我们的Git仓库上

  • 右上角用户下拉框中设置,左侧菜单SSH公钥,然后添加公钥

    在这里插入图片描述

  • 确定后,填写密码验证,即可新增成功,后续拉取代码只需要克隆ssh地址,即可自动进行认证,无需再手动填写账号密码了!

  • 注意:一台电脑只能对应一份公私钥。如果要换电脑拉取属于你仓库的代码,那么需要重新在新电脑上生成公私钥,再将公钥新增到Git仓库上

4、测试

  • 账户的 SSH Key 和账户绑定,当账户具有 推送/拉取 权限时可通过 SSH 方式 推送/拉取 的仓库。

  • 通过 ssh -T 测试时,输出 SSH Key 绑定的用户名:

    $ ssh -T git@gitee.com
    Hi USERNAME! You've successfully authenticated, but GITEE.COM does not provide shell access.
    
  • 上面命令要在Git 命令行中输入验证

    在这里插入图片描述

5、将原根据HTTP地址拉下来的仓库改为SSH

  • 当学会上面使用SSH的连接方式时,你可能会想修改原来使用HTTP拉取下来的代码,否则即便你配置好公钥了,但还是不能使用ssh连接
  • 命令如下:
# 查看远程仓库地址,首先要进入项目的目录,打开cmd窗口
git remote -v

# 修改远程仓库地址,比如:git remote set-url origin git@github.com:user/repo.git
git remote set-url <remote-name> <new-url>

# 最后再执行第一个命令,查看仓库地址是否修改成功

在这里插入图片描述

使用SSH连接Linux

  • 下面使用windows连接Linux(CentOS 7)为例进行演示

1、本地生成公私钥

  • 这里和上面第一章节一模一样,就不演示了本地生成公私钥,我这里只使用命令ssh-keygen生成

2、确认并开启服务器的SSH服务

以下命令基于CentOS 7,其余操作系统的命令网上搜一下就好了

# 检查当前ssh服务是否启动
systemctl status sshd

# 如果没有安装的话安装ssh
yum install openssh-server

# 启动SSH服务
systemctl start sshd

# 设置 SSH 服务开机自启
systemctl enable sshd

# 再次执行第一个命令,查看状态

3、配置公钥

3.1、方法一(使用 ssh-copy-id(需先安装))

  • 安装工具

    scoop install ssh-copy-id  # 需先安装 Scoop 包管理器
    
  • 复制公钥,执行如下命令,例如:ssh-copy-id root@192.168.71.111

    ssh-copy-id user@server_ip
    
  • 执行过程

    1. 系统会提示输入服务器密码(仅首次需要)。
    2. 验证成功后,公钥会自动添加到服务器的 ~/.ssh/authorized_keys 文件中。

3.2、方法二(手动复制)

  • 接下来,我们要把本地生成的公钥文件,放入Linux服务器的~/.ssh/authorized_keys文件中,执行如下命令

    # 先检查是否有/root/.ssh/authorized_keys文件,如果没有先创建
    mkdir -p /root/.ssh
    
    cd /root/.ssh
    
    touch authorized_keys
    
    # 追加文件内容
    echo 你的公钥内容 >> ~/.ssh/authorized_keys
    

4、连接服务器

  • 打开windowsPowerShell,输入以下命令,比如:ssh root@192.168.71.111

    ssh 用户名@服务器IP地址
    
  • 当首次连接到服务器时,系统会询问是否接受服务器的公钥。键入 yes 然后按 Enter

  • 输入 CentOS 用户的密码并按 Enter

  • 预期结果:

    • 若配置正确,将直接连接,无需输入密码(除非设置了密钥密码)。
    • 若仍提示密码,可能是公钥未正确配置。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到