基于ssh密钥的方式连接github
当使用普通的模式连接github的时候,需要在连接的时候输入github的用户名和密码,在github中提供了另外一种连接方式,就是基于ssh认证的方式,使用了这种方式之后,以后连接github都不用再输入任何的用户和密码信息,连接时会自动通过ssh的密钥进行验证。设置ssh密钥的流程有:
1、在我的文档的目录中创建一个.ssh的文件夹
2、在本地生成ssh的私有和公有密钥
3、在github网站上添加本地生成的密钥
4、测试连接
在我的文档目录创建一个.ssh的文件夹
找到我的文档的目录,在windows系统中一般在C:\Users\xx中,但是需要注意的是在win系统中无法直接在我的电脑里面创建.开头的目录,需要在命令提示符中创建这个目录。
C:\Users\konghao>mkdir .ssh -->创建.ssh目录
C:\Users\konghao>dir .ssh
驱动器 C 中的卷是 系统
卷的序列号是 0000-3D66
C:\Users\konghao 的目录
2017/03/24 周五 08:31 <DIR> .ssh -->查询这个目录
创建密钥
1、打开git bash,如果在git的时候选择了将git的命令添加到命令提示符中之后,即可在命令提示中使用。
2、输入ssh密钥的生成命令,输入命令ssh-keygen -t rsa -b 4096 -C "ynkonghao@gmail.com"
可以生成一个ssh的密钥。
输入完成之后会提示Enter file in which to save the key (/c/Users/konghao/.ssh/id_rsa):
这意味着让你输入一个密钥的地址,这个地址在win中是不能更改的,/c/Users/konghao/.ssh表示的是第一步所创建的.ssh的目录,id_rsa表示的是密钥的文件名。这些都是不能更改的,如果希望一台电脑中有多个密钥,需要增加新的配置,这个部分大家通过网络即可获取操作方式。
C:\Users\konghao>ssh-keygen -t rsa -b 4096 -C "ynkonghao@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/konghao/.ssh/id_rsa): /c/Users/konghao/.ssh/id_rsa
输入完成密钥的地址之后,会有提示让输入Enter passphrase (empty for no passphrase):
,这个表示口令,当设置了这个口令之后,以后每次通过ssh登录github都需要输入这个口令,这样就算本地的私有密钥文件丢失,其他人不知道你的口令也无法使用ssh登录也不会如果输入以后在连接ssh时还需要输入这个口令,这样可以增加它的安全性,但带来的问题就是每次都得输入登录口令,操作相对麻烦一些,但ssh提供了ssh-agent可以处理这个问题。
此时如果你不输入passphrase
直接回车即可,这样就完成了ssh密钥的创建,如果输入了passphrase
,以后我们每次连接ssh都需要输入口令。
#输入添加ssh密钥的命令
C:\Users\konghao\.ssh>ssh-keygen -t rsa -b 4096 -C "ynkonghao@gmail.com"
Generating public/private rsa key pair.
#输入密钥文件的生成地址,如果不输入就直接生成在/c/Users/konghao/.ssh/中,其中/c表示win的c盘
Enter file in which to save the key (/c/Users/konghao/.ssh/id_rsa):、
#输入口令,此处个人是输入了口令的,为了演示ssh-agent的操作
Enter passphrase (empty For no passphrase):
Enter same passphrase again:
#完成ssh密钥的创建
Your identification has been saved in /c/Users/konghao/.ssh/id_rsa.
Your public key has been saved in /c/Users/konghao/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Nn0cDnMZ1w5WVv+dh4tkuBTapbnWHbaJhC9lGbtHauc ynkonghao@gmail.com
The keys randomart image is:
+---[RSA 4096]----+
| . .o=|
| +o.o|
| + *. o.|
| + & = .=|
| S O % =.+|
| . o % O =.|
| = O B |
| . o + |
| E |
+----[SHA256]-----+
C:\Users\konghao\.ssh>dir
驱动器 C 中的卷是 系统
卷的序列号是 0000-3D66
C:\Users\konghao\.ssh 的目录
2017/03/24 周五 09:58 <DIR> .
2017/03/24 周五 09:58 <DIR> ..
2017/03/24 周五 09:58 3,326 id_rsa #私有密钥文件
2017/03/24 周五 09:58 745 id_rsa.pub #公有密钥
2 个文件 4,071 字节
2 个目录 187,734,855,680 可用字节
创建完成之后我们发现在.ssh文件中多了两个文件,这两个文件就是ssh的登录密钥,其中id_rsa表示本地的私有密钥,而id_rsa.pub表示公有密钥,需要把公有密钥id_rsa.pub添加到github中。由于我在创建密钥时输入了口令,所以连接ssh都需要输入口令,为了可以完成连接,我们需要在github中添加公有密钥id_rsa.pub
在github上添加公有密钥
进入github的网站,点击自己的头像,选择settings
进入个人设置之后选择SSH AND GPG Keys
选择new SSH Key
打开刚才在.ssh文件夹中生成的id_rsa.pub文件,该文件就是ssh的公共密钥
在github网站的中添加刚才的密钥信息,首先添加一个标题,之后将id_rsa.pub的内容拷贝到key的输入框中。
添加完成之后,在命令提示符中输入ssh -T git@github.com可以测试是否连接成功,由于在创建密钥时我输入了口令,所以验证的时候会让我输入口令。
C:\Users\konghao>ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
Enter passphrase for key '/c/Users/konghao/.ssh/id_rsa':
Hi ynkonghao! You've successfully authenticated, but GitHub does not provide shell access.
到此为止ssh的配置已经基本完成,但是由于在创建时我输入了口令,这就导致每次连接github都得输入,稍显麻烦,此时我们使用ssh-agent解决这个问题。这个操作需要在gitbash中进行操作。
在gitbash中首先输入eval $(ssh-agent)
开启agent模式,之后输入ssh-add /c/Users/konghao/.ssh/id_rsa
即可将我的密钥添加至ssh-agent,添加完成之后,我们再次进行验证就不用输入口令了。但该操作都是在ssh-agent中使用的,只要关闭窗口下次依然需要输入口令进行验证,这样就算在命令提示符中也不起作用。所以如果非特殊的环境,不一定非要设置ssh的验证的口令。
$ eval $(ssh-agent)
Agent pid 6748 ##进入代理模式
konghao@SD-201702261156 MINGW64 ~
$ ssh-add /c/Users/konghao/.ssh/id_rsa
Enter passphrase for /c/Users/konghao/.ssh/id_rsa:
Identity added: /c/Users/konghao/.ssh/id_rsa (/c/Users/konghao/.ssh/id_rsa)
konghao@SD-201702261156 MINGW64 ~
$ ssh -T git@github.com ##此时就不需要输入验证口令,但重新启动窗口还需要重新设置agent
Hi ynkonghao! You've successfully authenticated, but GitHub does not provide shell access.
需要注意的是,当设置了ssh之后,我们以后访问github就不能再使用https://github.com/ynkonghao/xxxx.git来访问,而需要使用git@github.com:ykonghao/xxx来访问。
github设置网页类型仓库
在实际的开发中我们可能会有这样的一种特殊需求,就是把自己的图片上传到github中,之后在项目中引用这些图片,此时如果直接使用github上的图片地址(如:https://github.com/ynkonghao/test/01.png)来访问并不会直接打开这些图片的,而是会打开github的地址,此时需要在地址后增加?raw=true的参数才能直接打开图片(https://github.com/ynkonghao/test/01.png?raw=true)。
github为每个用户提供了一个网页类型的仓库,只要设置了这个仓库,我们就可以更加快捷的来访问github上自己的资源,注意每个用户只能设置一个网页仓库。
首先基于用户名创建一个仓库,假设我的用户名是kh121,那我们就需要创建一个kh121.github.io的仓库,之后进入仓库的settings
找到github pages的选项,在这个选项中选择一个主题即可,当然主题也可以自己定义和设置
选择一个主题之后,github的page就算设置完成了
此时通过https://kh121.github.io即可访问我们定义的仓库主页,我们以后就可以在该仓库中添加自己所需要的内容,此时我们clone一下工厂,然后推送一张图片上去,然后直接通过类似的地址https://kh121.github.io/img/01.jpg即可访问图片。
##克隆工厂到本地
E:\study\git_2016\11>git clone https://github.com/kh121/kh121.github.io
Cloning into 'kh121.github.io'...
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
E:\study\git_2016\11>cd kh121.github.io
##创建一个img的文件夹存储文件
E:\study\git_2016\11\kh121.github.io>mkdir img
E:\study\git_2016\11\kh121.github.io>git add .
E:\study\git_2016\11\kh121.github.io>git commit -m "test img"
[master 3e123bc] test img
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 img/01.jpg ##文件名是01.jpg
##将文件推送到服务端
E:\study\git_2016\11\kh121.github.io>git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 825.44 KiB | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/kh121/kh121.github.io
4e233c5..3e123bc master -> master
当创建完页面并选择主题之后可以通过修改index.md这个文件来修改自己的网页,为了方便期间,个人在这个文件中加入了一个仓库的超链接。
[My GitHub Repository](https://github.com/kh121/kh121.github.io)
此时再次打开https://kh121.gihub.io会发现多了这样一个连接
你同样也可以根据markdown的语言来调整自己的个人网页。
最后我们同样也可以将一个github的新工厂加入到这个网页工厂中进行显示,操作也非常简单,就是创建工厂和选择主题即可。此处我创建了一个page的工厂
之后选择一个主题,之后通过https://kh121.github.io/page即可访问
简单总结
这一部分的内容就到此为止了,基于ssh的验证基本上是每个github的使用者必须使用的一个手段,另外基于github的网页工厂可以根据自己的需求来进行考量。