摘要:
本文是上篇《hexo+github搭建博客笔记》的一些补充。
翻阅博客的时候,对本地博客怎么部署到github上,以及如何配置SSH密钥,以及如何将公钥添加到远程服务器上的原理有一些不清楚,于是作了一个笔记,记录下来。

SSH 密钥

生成SSH密钥

SSH 密钥用于安全地连接到远程服务器,通常用于无密码登录和身份验证。以下是如何生成和使用 SSH 密钥的步骤:

  1. 生成 SSH 密钥
    打开终端:

在 Linux ,打开终端。
在 Windows 上,使用 Git Bash。
生成 SSH 密钥对:

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa 指定密钥类型为 RSA。
  • -b 4096 指定密钥长度为 4096 位。
  • -C “your_email@example.com“ 添加一个标签,通常是你的电子邮件地址。
  1. 保存密钥:
    按回车键接受默认文件位置(通常是 ~/.ssh/id_rsa)。
    输入一个密码(可选)以增加安全性。
    查看生成的密钥
    生成的密钥对将保存在 ~/.ssh 目录下:
  • 私钥:id_rsa
  • 公钥:id_rsa.pub

公钥:

  • 加密:用于加密数据,只有对应的私钥才能解密。
  • 签名验证:用于验证使用私钥签名的数据的正确性和完整性。
  • 保密性:可以公开共享,通常用于添加到远程服务器的 ~/.ssh/authorized_keys 文件中,以便进行无密码登录。

私钥:

  • 解密:用于解密使用公钥加密的数据。
  • 签名:用于对数据进行签名,以证明数据的来源和完整性。
  • 保密性:必须严格保密,不能公开。如果私钥泄露,攻击者可以冒充你进行身份验证或解密数据。

总结两者之间的关系:

  • 公钥:添加到 GitHub 账户中,用于验证你的身份。
  • 私钥:保存在你的本地机器上,用于解密 GitHub 发送的挑战。

将公钥添加到GitHub上

  1. 登录到你的 GitHub 账户。
  • 进入 Settings > SSH and GPG keys。
  • 点击 New SSH key。
  • 在 Title 中输入一个描述性的名称,例如 “My Laptop”。
  • 在 Key 中粘贴你之前复制的公钥内容。
  • 点击 Add SSH key。
  1. 测试 SSH 连接:
    1
    2
    3
    ssh -T git@github.com
    % -T 选项:禁用伪终端分配。这使得命令的输出更简洁,更适合脚本和自动化任务。
    % git@github.com:指定你要连接的 GitHub 服务器和用户(git 用户)。
    命令解释:
    简单回答:ssh -T git@github.com 是一个用于测试 SSH 连接到 GitHub 的命令。这个命令可以帮助你验证你的 SSH 密钥是否已经正确地添加到 GitHub 账户中,并且可以成功地进行身份验证。
    详细回答:
  • 身份验证:当你运行 ssh -T git@github.com 时,GitHub 服务器会使用你提供的公钥来验证你的身份。具体来说,GitHub 会使用你的公钥来解密一个挑战(challenge),如果你的私钥能够成功解密这个挑战,GitHub 会认为你是合法用户。
  • 公钥和私钥的关系:公钥和私钥是一对,公钥用于加密,私钥用于解密。当你在 GitHub 上添加公钥后,GitHub 会使用这个公钥来验证你提供的私钥是否匹配。
  • 通过 ssh -T git@github.com 命令,你可以验证你的公钥是否已经正确添加到 GitHub 账户中,并且你的私钥是否能够成功进行身份验证
  1. 预期输出
    首次连接: 如果这是你第一次连接到 GitHub,系统会提示你确认 GitHub 的主机密钥指纹:
    1
    2
    3
    The authenticity of host 'github.com (IP_ADDRESS)' can't be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    输入 yes 继续连接。
    成功连接: 如果你的 SSH 密钥已正确添加到 GitHub 账户中,你会看到以下消息:
    1
    Hi username! You've successfully authenticated, but GitHub does not provide shell access.
    其中 username 是你的 GitHub 用户名。

将公钥添加到远程服务器

复制公钥:

1
cat ~/.ssh/id_rsa.pub

复制输出的内容。
将公钥添加到远程服务器:
登录到远程服务器:

1
ssh user@remote_host

创建 .ssh 目录(如果不存在):

1
mkdir -p ~/.ssh

将公钥添加到 authorized_keys 文件:

1
echo "your_public_key" >> ~/.ssh/authorized_keys

设置正确的权限:

1
2
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试 SSH 连接
退出远程服务器:

1
exit

尝试无密码登录:

1
ssh user@remote_host

如果一切配置正确,你应该能够无密码登录到远程服务器。

常见问题

  • 权限问题:确保 .ssh 目录和 authorized_keys 文件的权限设置正确。
  • 密钥密码:如果你在生成密钥时设置了密码,每次使用 SSH 连接时都需要输入该密码。可以使用 ssh-agent 来管理密钥密码:
    1
    2
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa