GitHub配置SSH登陆

TMaize 于 2017-07-22 发布

http 和 ssh 的区别都可以克隆项目到本地。使用 http 客户端无需额外的配置;而使用 ssh 需要先配置和公钥私钥,好处是使用 git 操作的时候可以不用不填写用户名,如果密钥不设置密码连密码也省去了填写

基本步骤

生成公钥私钥

  1. windows 平台

    1. git 安装目录usr/bin/ssh-keygen.exe
    2. 或者使用 XShell 自带的图形工具:工具-新建密钥生成向导
  2. linux 下直接使用 ssh-keygen 命令

命令#ssh-keygen -t [rsa|dsa] [-C "email"]

# 提示输入文件名,默认为id_rsa
# 提示输入密码,默认无密码
# 重复输入密码
ssh-keygen -t rsa -C "youremail@demo.com"

之后就会在C:\Users\tmaize\.ssh目录就可以看到多了两个文件,如果上述步骤没有输入文件名,则一个是 id_rsa 一个是 id_rsa.pub

将公钥内容复制并上传于 github

  1. 在个人信息设置 SSH and GPG keys 为所有项目设置一个统一的

  2. 在单个项目的设置里面设置 Deploy keys,记得勾选 Allow write access

测试连接

ssh -T git@github.com
Enter passphrase for key '/c/Users/tmaize/.ssh/id_rsa':
Hi TMaize! You've successfully authenticated, but GitHub does not provide shell access.

项目测试

将你的项目通过 ssh clone 到本地,如果为密钥设置了密码,会提示输入密钥密码,在 push 的时候会再次提示输入密钥的密码。如果在建立公钥私钥的时候没有设置密码,那么在 clone push 的在整个过程中都无需密码。

为不同域名配置不同密钥

一般情况下都是默认使用 id_rsa,当然也可以针对不用的域名使用不同的密钥

再次生成一对 id_rsa_nopwd 和 id_rsa_nopwd.pub,加入我要把这个密钥应用与 gitee,guthub 不变依旧使用默认的 id_rsa

C:\Users\用户名\.ssh下面新建文件 config,换行格式使用 LF

假设克隆地址为git@gitee.com/user/project.git,HostName 取gitee.comUser 取git,Host 是别名用于区分同一个域名不同项目的,一般设置的都是全局的密钥,Host 直接取 HostName 就行了

如果要区分同一域名下的不同项目,需要设置不同的 Host 就行了假设 Host 设置为了 test,则克隆地址要变为git@test/user/project.git

Host gitee.com
     HostName gitee.com
     IdentityFile C:/Users/tmaize/.ssh/id_rsa_nopwd
     PreferredAuthentications publickey
     User git

最后记得删除下同目录下 known_hosts 文件。至此就实现了不同域名使用不同密钥

一些问题

使用 TortoiseGit 失败

在使用 TortoiseGit 图形界面 clone 时老是失败,只需要修改 TortoiseGit 的设置即可

在设置-网络里配置 SSH 客户端为E:\Git\usr\bin\ssh.exe即可

将本地项目的协议由 http 修改为 ssh

方法有三种:

  1. 修改命令

    git remote origin set-url [url]

  2. 先删后加

    git remote rm origin
    git remote add origin [url]
    
  3. 直接修改项目目录/.git/config文件

  4. 使用 TortoiseGit 设置-Git-远端