使用SSH进行GitHub的推送

使用SSH进行GitHub的推送是一种安全且便捷的方法。
以下是详细的步骤,配置SSH并通过SSH推送到GitHub:

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

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

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

ls -al ~/.ssh

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

我的:

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

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

步骤二:生成新的SSH密钥

  1. 生成SSH密钥:

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

    ssh-keygen -t ed25519 -C "your_email@example.com"
    
       ssh-keygen -t ed25519 -C 10xxxxxxx3@qq.com
    

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

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

    • 保存密钥位置: 默认情况下,按回车键选择默认路径(~/.ssh/id_ed25519~/.ssh/id_rsa)。
    • 设置密码短语(可选): 为密钥设置一个密码短语以增加安全性,或者直接按回车键跳过。
(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代理:

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

    ssh-add ~/.ssh/id_ed25519
    

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

    ssh-add ~/.ssh/id_rsa
    

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

  1. 复制SSH公钥内容:

    cat ~/.ssh/id_ed25519.pub
    

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

    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:

ssh -T git@github.com

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

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

Hi galaxy-vagrant! You've successfully authenticated, but GitHub does not provide shell access.

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

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

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

    git remote remove origin
    
  2. 添加正确的SSH远程仓库URL:

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

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

    git remote -v
    

    应该显示类似如下内容:

    origin  git@github.com:myusr/myrepo.git(fetch)
    origin  git@github.com:myusr/myrepo.git (push)
    

步骤七:推送分支到GitHub

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

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

常见问题排查

  1. 权限问题:

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

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

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

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

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

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

      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 代理会在登录时自动启动并加载你的私钥。如果没有自动启动,你可以手动启动并添加密钥:

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

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

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

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

ssh -T git@github.com

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

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

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

git remote -v

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

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 操作。如果在使用过程中遇到连接问题,可以通过上述步骤进行排查和验证。

上一篇:若依框架中根目录与子模块 `pom.xml` 的区别


下一篇:《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(2)-Wireshark在Windows系统上安装部署