Git配置SSH Key
记录 Git 配置 SSH-Key 的过程,方便以后查阅。
Git配置SSH Key
HTTPS URL 和 SSH URL
在使用 git clone 项目时,可以使用仓库的 HTTPS URL 也可以 使用 SSH URL
HTTPS URL,例如:
1
https://github.com/<username>/<repo name>.git
SSH URL,例如:
1
git@github.com:<username>/<repo name>.git
这两种方式的主要区别在于:使用 HTTPS URL 克隆时,每次 fetch 和 push 代码都需要输入账号和密码,而使用 SSH URL 在配置好 SSH Key 后,每次 fetch 和 push 代码都不需要输入账号和密码。
初次运行 Git 前的配置
Git 环境变量
Git 提供了一个叫做 git config
的工具,专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
配置用户信息
初次运行 Git 前需要配置用户信息,一个是你个人的用户名称,一个是你的电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
1 | git config --global user.name "John Doe" |
如果用了 --global
选项,那么更改的配置文件就是位于你用户主目录下的 ~/.gitconfig
文件,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者邮箱,只要去掉 --global
选项重新配置即可,新的设定保存在当前项目的 .git/config
文件里。
查看配置信息
要检查已有的配置信息,可以使用 git config --list
命令:
1 | git config --list |
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig
和 ~/.gitconfig
),不过最终 Git 实际采用的是最后一个。
也可以直接查阅某个环境变量的设定,只要把特定的环境变量名称跟在后面即可,例如:
1 | git config user.name |
检查是否已有 SSH Key
1 | cd ~/.ssh |
执行 ls
或 ll
1 | ls |
看是否存在 id_rsa 和 id_rsa.pub 文件(或者是其它文件名),如果存在说明已有 ssh key,可以直接跳过生成密钥,其中 id_rsa 为私钥,id_rsa.pub 为公钥。
生成 SSH key
1 | ssh-keygen -t rsa -C "your_email@example.com" |
参数 | 描述 |
---|---|
-t |
指定密钥类型,默认是rsa,可以省略 |
-C |
设置注释文字,比如邮箱 |
-f |
指定密钥文件存储文件名 |
以上代码省略了 -f
参数,因此在运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key,例如:
1 | ssh-keygen -t rsa -C "your_email@example.com" |
当然,你也可以不输入文件名,直接回车使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个密钥文件。
接着又会提示你输入两次密码(该密码是你 push 文件的时候要输入的密码,而不是 github 管理者的密码),当然,你也可以不输入密码,直接连续两次按回车。那么 push 的时候就不需要输入密码,直接提交到 github 上了,例如:
1 | ssh-keygen -t rsa -C "your_email@example.com" |
连续两次回车确认后,如下:
1 | ssh-keygen -t rsa -C "your_email@example.com" |
看到以上 save 成功的提示,说明 SSH Key 已经创建成功,提示已经说明密钥文件已保存在 ~/.ssh
文件夹下。
添加 SSH Key 到 Github
登录 github,点击头像,点击 Settings 进入设置页面。
然后点击菜单栏的 SSH Key 进入页面添加 SSH Key。
点击 New SSH Key 按钮后进行 Key 的填写,其中 Title 随意, Key 为刚刚生成的公钥,公钥在文件 id_rsa.pub 文件中,直接 copy 文件中的内容粘贴即可。
测试 SSH key
1 | ssh -T git@github.com |
当执行以上代码时,会有一段警告,如:
1 | The authenticity of host 'github.com (207.97.227.239)' can't be established. |
这是正常的,直接输入 yes 回车既可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:
1 | Enter passphrase for key '~/.ssh/id_rsa': |
当然如果你密码输错了,会再要求你输入,直到对了为止。注意:输入密码时如果输错一个字符就会不正确,使用删除键是无法更正的。正确输入密码后你会看到下面这段话,如:
1 | Hi username! You've successfully authenticated, but GitHub does not provide shell access. |
如果用户名是正确的,你已经成功设置 SSH 密钥。如果你看到 "access denied" ,者表示拒绝访问,那么你就需要使用 HTTPS 去访问,而不是 SSH 。