使用SSH进行GitHub的推送

使用SSH进行GitHub的推送是一种安全且便捷的方法。

以下是详细的步骤,配置SSH并通过SSH推送到GitHub:

对于同一个电脑,已经配置过的可以直接从步骤五开始

步骤一:检查是否已有SSH密钥

首先,检查计算机上是否已经有SSH密钥对:

bash 复制代码
ls -al ~/.ssh

如果看到id_rsaid_rsa.pub(或id_ed25519id_ed25519.pub)文件,说明已经有SSH密钥。如果没有,请继续下面的步骤生成一个新的SSH密钥对。

我的:

bash 复制代码
(base) rooter@rooter:~$ ls -al ~/.ssh
total 12
drwx------  2 rooter rooter 4096 10月 14 21:56 .
drwxr-xr-x 30 rooter rooter 4096 10月 14 22:14 ..
-rw-r--r--  1 rooter rooter  888 10月 14 22:23 known_hosts

~/.ssh 目录中只有 known_hosts 文件,没有 SSH 密钥对(如 id_rsa 和 id_rsa.pub 或 id_ed25519 和 id_ed25519.pub)

步骤二:生成新的SSH密钥

  1. 生成SSH密钥:

    推荐使用Ed25519算法(如果你的系统支持),因为它更安全且性能更好。如果不支持,可以使用RSA。

    bash 复制代码
    ssh-keygen -t ed25519 -C "your_email@example.com"
    bash 复制代码
       ssh-keygen -t ed25519 -C 10xxxxxxx3@qq.com

    如果需要使用RSA,可以使用:

    bash 复制代码
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  2. 按照提示操作:

    • 保存密钥位置: 默认情况下,按回车键选择默认路径(~/.ssh/id_ed25519~/.ssh/id_rsa)。
    • 设置密码短语(可选): 为密钥设置一个密码短语以增加安全性,或者直接按回车键跳过。
bash 复制代码
(base) rooter@rooter:~$ ssh-keygen -t ed25519 -C 1000000003@qq.com
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/rooter/.ssh/id_ed25519): 
/home/rooter/.ssh/id_ed25519 already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/rooter/.ssh/id_ed25519
Your public key has been saved in /home/rooter/.ssh/id_ed25519.pub
The key fingerprint is:
omit
The key's randomart image is:
omit

步骤三:启动SSH代理并添加密钥

  1. 启动SSH代理:

    bash 复制代码
    eval "$(ssh-agent -s)"
  2. 添加SSH密钥到代理:

    bash 复制代码
    ssh-add ~/.ssh/id_ed25519

    或者,如果使用的是RSA密钥:

    bash 复制代码
    ssh-add ~/.ssh/id_rsa

步骤四:将SSH公钥添加到GitHub

  1. 复制SSH公钥内容:

    bash 复制代码
    cat ~/.ssh/id_ed25519.pub

    或者,如果使用的是RSA密钥:

    bash 复制代码
    cat ~/.ssh/id_rsa.pub

    复制输出的内容(以ssh-ed25519ssh-rsa开头的字符串)。

    全部都是

  2. 登录GitHub并添加SSH密钥:

    • 登录你的GitHub账户
    • 点击右上角的头像,选择"Settings(设置)"。
    • 在左侧菜单中选择"SSH and GPG keys"。
    • 点击"New SSH key"按钮。
    • 填写一个标题(如"我的电脑"),并在"Key"字段中粘贴刚才复制的公钥内容。
    • 点击"Add SSH key"。

步骤五:验证SSH连接

在终端中运行以下命令,验证是否成功连接到GitHub:

bash 复制代码
ssh -T git@github.com

第一次连接时,可能会提示确认主机指纹,输入yes继续。

成功连接后,应该会看到如下消息:

bash 复制代码
Hi galaxy-vagrant! You've successfully authenticated, but GitHub does not provide shell access.

步骤六:配置Git远程仓库使用SSH

  1. 移除错误的远程仓库URL:

    由于之前使用的是HTTPS URL,需要先移除:

    bash 复制代码
    git remote remove origin
  2. 添加正确的SSH远程仓库URL:

    SSH格式的URL为git@github.com:用户名/仓库名.git

    replace myusr/myrepo.git

    bash 复制代码
    git remote add origin git@github.com:myusr/myrepo.git
  3. 验证远程仓库URL是否正确:

    bash 复制代码
    git remote -v

    应该显示类似如下内容:

    bash 复制代码
    origin  git@github.com:myusr/myrepo.git(fetch)
    origin  git@github.com:myusr/myrepo.git (push)

步骤七:推送分支到GitHub

现在,可以使用SSH方式推送分支了:

bash 复制代码
git push -u origin v1.0
  • -u 参数将本地分支 v1.0 与远程的 v1.0 分支关联起来,方便后续使用 git pushgit pull

常见问题排查

  1. 权限问题:

    • 确认SSH公钥已正确添加到GitHub账户。
    • 确保使用的是正确的GitHub账户,与添加公钥的账户一致。
  2. SSH代理问题:

    • 确保SSH代理已启动并添加了密钥。

    • 可以重启SSH代理并重新添加密钥:

      bash 复制代码
      eval "$(ssh-agent -s)"
      ssh-add ~/.ssh/id_ed25519
  3. 防火墙或网络问题:

    • 确保网络允许SSH连接到GitHub(端口22)。

    • 如果公司或校园网络有限制,可以尝试使用GitHub提供的替代端口:

      bash 复制代码
      ssh -T -p 443 git@ssh.github.com
  4. 确认仓库存在:

    • 确认仓库 myrepo 存在于 myusr 账户下,并且有推送权限。

常见问题解答

一旦在同一个电脑上成功配置了 SSH 密钥,并将公钥添加到了 GitHub 账户中,通常情况下不需要每次都重新配置。只要满足以下条件,就可以直接通过 SSH 进行远程连接和操作:

1. SSH 密钥对持久存在
  • 私钥 (~/.ssh/id_rsa~/.ssh/id_ed25519)公钥 (~/.ssh/id_rsa.pub~/.ssh/id_ed25519.pub) 文件保存在你的电脑上,并且没有被删除或移动。
  • 如果你为私钥设置了密码短语,确保你记得密码,并且 SSH 代理(ssh-agent)在需要时能够访问该密码。
2. SSH 代理(ssh-agent)正在运行
  • SSH 代理 用于管理你的私钥,确保你在需要时能够自动输入密码短语(如果设置了)。

  • 在大多数现代操作系统中,SSH 代理会在登录时自动启动并加载你的私钥。如果没有自动启动,你可以手动启动并添加密钥:

    bash 复制代码
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519  # 或者使用 id_rsa

    为了简化这一过程,你可以将上述命令添加到你的 shell 启动脚本(如 .bashrc.zshrc)中。

3. 公钥已正确添加到 GitHub
  • 确保你生成的 公钥 已经正确添加到了你的 GitHub SSH 密钥设置 中。
  • 如果你更换了电脑或重新生成了 SSH 密钥,需要将新的公钥添加到 GitHub。
4. 验证远程连接

你可以通过以下命令验证 SSH 连接是否正常工作:

bash 复制代码
ssh -T git@github.com

成功连接后,你应该会看到类似如下的消息:

bash 复制代码
Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.
5. 配置 Git 远程仓库使用 SSH URL

确保你的 Git 仓库的远程地址使用的是 SSH URL 而不是 HTTPS URL。你可以通过以下命令查看当前的远程仓库地址:

bash 复制代码
git remote -v

如果显示的是 HTTPS 地址(如 https://github.com/username/repo.git),你可以将其更改为 SSH 地址:

bash 复制代码
git remote set-url origin git@github.com:username/repo.git
6. 无需频繁重新配置

在大多数情况下,只要满足上述条件,你无需每次都重新配置 SSH。你的 SSH 配置会一直有效,直到你手动更改或删除相关的密钥和配置。

注意事项
  1. 安全性

    • 保护私钥 :确保你的私钥文件(如 ~/.ssh/id_rsa~/.ssh/id_ed25519)权限正确(chmod 600),并且不要泄露给他人。
    • 密码短语:为私钥设置密码短语可以增加安全性,即使私钥被盗,攻击者也无法轻易使用它。
  2. 多设备使用

    • 如果你在多台设备上工作,每台设备需要各自生成 SSH 密钥对,并将各自的公钥添加到 GitHub。
  3. 密钥管理

    • 如果你怀疑密钥被泄露,及时在 GitHub 上删除相关公钥,并生成新的密钥对。
  4. 更新 GitHub 配置

    • 如果你更改了 GitHub 用户名或迁移了仓库,确保更新本地仓库的远程地址。
总结

一旦你在电脑上正确配置了 SSH 密钥,并将公钥添加到了 GitHub,你通常无需每次都重新配置。只需确保 SSH 代理正在运行,私钥文件完好,并且远程仓库使用的是 SSH URL,就可以方便、安全地进行 Git 操作。如果在使用过程中遇到连接问题,可以通过上述步骤进行排查和验证。

相关推荐
K2I-19 分钟前
UCI中Steel Plates Faults不平衡数据集处理
python
蓑笠翁00119 分钟前
Django REST Framework 全面指南:从模型到完整API接口开发
后端·python·django
感谢地心引力1 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
xiaohanbao092 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love3 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫3 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………3 小时前
SortedList
python
这里有鱼汤4 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜4 小时前
Java25 新特性介绍
java·python·算法
深栈4 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn