发布于2022年11月4日3年前 前言: 前置基础: 通过SSH连接:检查已有的SSH密钥对 生成新的SSH密钥 在 Git for Windows 上自动启动 ssh-agent 添加SSH 公钥到 GitHub 帐户 测试 SSH 连接 将远端仓库的 URL 从 HTTPS 切换到 SSH 参考: 前言: 讲一个笑话:最近给新电脑装Git工具,才意识到自己之前用SSH连接GitHub的方法居然是错的。是这样的,我配置了密钥对后依然在使用之前配置的浏览器登录。这次换新电脑,之前没有登录GitHub,新装的Git工具。跟着官方文档配置完成后,git push -u origin master 居然还弹出登录页面,然后我才意识到之前错了。使用SSH连接仓库和创建仓库时GitHub教你的方法两者协议是不一样的,网页上给的参考命令是用的HTTPS。这些其实在开始使用Git文档中有的,只是不仔细看容易忽略。官方的SSH连接操作文档半中半英可读性也不够好,第一次读的时候没看仔细。以上教训告诉我们,学习不能急于求成,基础要仔细掌握。所以鄙人在此水贴一篇,算是个基础教程吧。(看我不如通读GitHub的文档?) 前置基础: GitHub是一个提供Git服务的网站。Git是一套版本控制工具。所以,使用GitHub除了一些网页上的设置,其主要功能就是使用Git。首次使用Git首先要下载安装,然后便是要配置用户名和邮箱,建议设置成和GitHub上相同的。配置分为全局配置和仓库配置,全局就是没有仓库配置时默认的用户信息;仓库的就是单独某个仓库生效的。下载安装程序运行,一路点击下一步,装完Git后便可以打开Git Bash啦。 # 设置全局配置: git config --global user.name "github's Name" git config --global user.email "[email protected]" # 设置仓库的配置,要在仓库目录下执行: git config user.name "git's Name" git config user.email "[email protected]" # 查看的命令,查哪在哪执行: git config --list Git存储内容项目的单元被称为仓库(Repository),作为一个仓库,创建的过程称之为初始化。然后创建文件,需要产生一个历史记录时,就将变更的文件按需添加到暂存区,提交(Commit)一次。有了一次Commit后,便可以为其设置远端仓库地址,将本地的仓库变化推送过去保存。大致这么个流程: # 创建一个以仓库名称命名的目录(或者叫文件夹),并进入其中。 mkdir XX-Repository cd XX-Repository # 使用初始化命令 git init # 按照实际需要,创建或从其他地方拷贝文件到目录下。惯例要创建一个README.md文件,给人看。 touch README.md cp ../../XXX.XXX ./XXX.XXX # 这个Linux下用的多,Win下不如直接图形界面拖拽。 # 文件写的差不多了,先按需添加到Commit暂存区, git add XXX.XXX XXX.XXX # 添加指定文件 git add -A # 添加所有新增或变更的文件 # 然后执行Commit,一般惯例要带-m参数,备注本次提交的变更。 git commit -m "first commit" # 添加远端仓库地址,地址从仓库主页的绿色Code按钮中能看到: git remote add origin https://github.com/USERNAME/REPOSITORY.git # 设置远端仓库的分支为master,并推送到该分支。 git push -u origin master # 因为上面是HTTPS的连接方式,所以会弹出网页的登录页面。按提示登录即可完成推送。 到此一个Git仓库大致就在GitHub上搞起来了。那如何换用SSH方式连接仓库呢? 通过SSH连接: 这里我抄一下官方的内容,原文半英半中,写了很多注意事项,很多内容的位置却不合理。在此我缩减了一下,有问题建议看官方文档。 检查已有的SSH密钥对 首先可以检查下您电脑上有没有已经生产的可用的密钥对,他们是成对的一组文件,包含私钥和公钥。 打开Git Bash。 执行 ls -al ~/.ssh ,如果.ssh目录下有密钥对变回在回显的信息中看到文件名类似于:id_rsa.pub id_ecdsa.pub id_ed25519.pub 这里,如果提示目录不存在,那看样子就是啥都没有了。如果有密钥对,就可以用后面的方法检查有没有密码加密,没有密码或者知道密码便可以直接用。否则就按下面的方法新建密钥对。 生成新的SSH密钥 如果您还没有 SSH 密钥,则必须生成新 SSH 密钥用于身份验证。为了安全,需要在生产的密钥对上添加密码保护。如果不想在每次使用 SSH 密钥时重新输入这个密码,您可以将密钥添加到 SSH 代理(即ssh-agent),让它管理您的 SSH 密钥并记住您的密码。 打开Git Bash。 复制下面的文本粘贴到Bash中执行(替换为您自己的 GitHub 电子邮件地址)。 ssh-keygen -t ed25519 -C "[email protected]" 注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令: ssh-keygen -t rsa -b 4096 -C "[email protected]" 此时将以邮箱地址为标签生成新的SSH密钥对。 提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,按 Enter 键。 这密钥会存在默认文件位置。(即~/.ssh ,不存在默认位置没有积极意义且会让后面更繁琐。) 在提示 Enter passphrase 时设置密码,在提示 Enter same passphrase again: 时重复密码。 在 Git for Windows 上自动启动 ssh-agent 您可以在打开 bash 或 Git shell 时自动运行 ssh-agent。并让它自动添加~/.ssh目录下新的 SSH 密钥。 复制以下内容并将其粘贴到 Git shell 的 ~/.profile 文件中保存,没有就创建一个: env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env ~/ 这个位置是用户的HOME目录,Windows 下就是 C:\Users\<你的用户名> 这个目录。 如果您的私钥没有存储在默认位置之一(如 ~/.ssh/id_rsa),您需要告知 SSH 身份验证代理其所在位置。 要将密钥添加到 ssh-agent,请输入 ssh-add ~/path/to/my_key。 重新开一个Git Bash窗口,ssh-agent首次被启动,自动搜索新增的密钥对,然后提示输入密码,按要求输入密码后密钥对就被加入了ssh-agent。以后运行 Git Bash 时便会自动启动 ssh-agent ,不再需要输入密码。 ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。 添加SSH 公钥到 GitHub 帐户 前面的操作概括来讲就是将本地的私钥添加到了本地的SSH代理中,下面要将公钥添加到GitHub上。 网页右上角点击头像,然后点击 Settings。在左侧找到 Access 部分,点击 SSH and GPG keys 。 点击右上方的 New SSH key,打开 SSH keys/ Add new 页面。 在 "Title"(标题)文本框中,为新公钥添加描述性标题,要求自己看到就知道是啥。 例如,如果密钥对用于枪神6笔记本上,此公钥名称可以是 "God of Gun 6"。 使用以下命令将 SSH 公钥复制到剪贴板,并粘贴到网页的"Key"(密钥)文本框中。最后点击 Add SSH key(添加 SSH 密钥),按提示输入GitHub的登录密码完成公钥的添加。 clip < ~/.ssh/id_ed25519.pub 提示:注意文件位置,此处是默认位置与文件名,如果前面你的位置不一样,需要灵活改变。如果 clip 命令不可用,可找到隐藏的 .ssh 文件夹,在常用的文本编辑器中打开该.pub文件,并将其内容复制到剪贴板。 这样GitHub那边有对应的公钥,我有对应的私钥,我本地的SSH便能够向GitHub证明我的身份啦。 测试 SSH 连接 测试连接时,您可能需要使用密码(即您之前创建的 SSH 密钥对的密码)验证此操作。如果密钥的密码之前没有缓存到ssh-agent中。如果是按照前面操作过来的,应该无需再次输入密码。 打开 Git Bash。 输入以下内容: ssh -T [email protected] 您可能会看到类似如下的警告: > 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)? 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是,则输入 yes。如果一切正常,会看到GitHub返回了一段包含您的用户名的消息。 > Hi username! You've successfully authenticated, but GitHub does not > provide shell access. 将远端仓库的 URL 从 HTTPS 切换到 SSH 打开 Git Bash。 将当前工作目录切换到为您的本地仓库。 列出现有远程仓库以获取要更改的远程仓库的名称,关注一下USERNAME和REPOSITORY部分。 $ git remote -v > origin https://github.com/USERNAME/REPOSITORY.git (fetch) > origin https://github.com/USERNAME/REPOSITORY.git (push) 使用 git remote set-url 命令更改远端的 URL ,注意将上面获取的名称换到下面命令中。 $ git remote set-url origin [email protected]:USERNAME/REPOSITORY.git 这里也可以使用git config 命令直接调整配置处理。 git config -l # 查看配置 git config remote.origin.url [email protected]:USERNAME/REPOSITORY.git git config -l # 再次执行,检查修改结果 参考: 使用 SSH 连接到 GitHub 将远程 URL 从 HTTPS 切换到 SSH
创建帐户或登录后发表意见