摘要:
本文是上篇《hexo+github搭建博客笔记》的一些补充。
翻阅博客的时候,对本地博客怎么部署到github上,以及如何配置SSH密钥,以及如何将公钥添加到远程服务器上的原理有一些不清楚,于是作了一个笔记,记录下来。
SSH 密钥
生成SSH密钥
SSH 密钥用于安全地连接到远程服务器,通常用于无密码登录和身份验证。以下是如何生成和使用 SSH 密钥的步骤:
- 生成 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“ 添加一个标签,通常是你的电子邮件地址。
- 保存密钥:
按回车键接受默认文件位置(通常是 ~/.ssh/id_rsa)。
输入一个密码(可选)以增加安全性。
查看生成的密钥
生成的密钥对将保存在 ~/.ssh 目录下:
- 私钥:id_rsa
- 公钥:id_rsa.pub
公钥:
- 加密:用于加密数据,只有对应的私钥才能解密。
- 签名验证:用于验证使用私钥签名的数据的正确性和完整性。
- 保密性:可以公开共享,通常用于添加到远程服务器的 ~/.ssh/authorized_keys 文件中,以便进行无密码登录。
私钥:
- 解密:用于解密使用公钥加密的数据。
- 签名:用于对数据进行签名,以证明数据的来源和完整性。
- 保密性:必须严格保密,不能公开。如果私钥泄露,攻击者可以冒充你进行身份验证或解密数据。
总结两者之间的关系:
- 公钥:添加到 GitHub 账户中,用于验证你的身份。
- 私钥:保存在你的本地机器上,用于解密 GitHub 发送的挑战。
将公钥添加到GitHub上
- 登录到你的 GitHub 账户。
- 进入 Settings > SSH and GPG keys。
- 点击 New SSH key。
- 在 Title 中输入一个描述性的名称,例如 “My Laptop”。
- 在 Key 中粘贴你之前复制的公钥内容。
- 点击 Add SSH key。
- 测试 SSH 连接:命令解释:
1
2
3ssh -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 账户中,并且你的私钥是否能够成功进行身份验证
- 预期输出
首次连接: 如果这是你第一次连接到 GitHub,系统会提示你确认 GitHub 的主机密钥指纹:输入 yes 继续连接。1
2
3The 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])?
成功连接: 如果你的 SSH 密钥已正确添加到 GitHub 账户中,你会看到以下消息:其中 username 是你的 GitHub 用户名。1
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
将公钥添加到远程服务器
复制公钥:
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 | chmod 700 ~/.ssh |
测试 SSH 连接
退出远程服务器:
1 | exit |
尝试无密码登录:
1 | ssh user@remote_host |
如果一切配置正确,你应该能够无密码登录到远程服务器。
常见问题
- 权限问题:确保 .ssh 目录和 authorized_keys 文件的权限设置正确。
- 密钥密码:如果你在生成密钥时设置了密码,每次使用 SSH 连接时都需要输入该密码。可以使用 ssh-agent 来管理密钥密码:
1
2eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa