现在大家都知道,如果要使用SSH连接GitHub管理代码就少不了配置SSH keys,才能在你的电脑中操作GitHub中的代码,比如提交、克隆等。
概要
首先 ssh 是一种安全协议,这大家都知道,在git中其实是支持4种安全协议https、http、git、ssh ,ssh的作用是能帮助我们从客户端(电脑)中去连接服务器,比如GitHub、阿里云服务器等。。。
当我们要连接GitHub的服务器时,在终端输入以下命令:
ssh -T git@github.com
如果链接成功了你会看到,此时说明你电脑和GitHub以及匹配成功了。
Hi ***! You've successfully authenticated, but GitHub does not provide shell access.
那如果你看到的是以下内容呢?
git@github.com: Permission denied (publickey).
说明你没有使用ssh协议链接GitHub的权限,那么这篇文章大概就能帮到你。
下面先介绍一下我们说的ssh
生成SHH
在Unix和Linux系统中,可以使用ssh-keygen命令来生成SSH密钥对(在windows中使用Git Bash终端窗口来创建)该命令默认会在当前用户的.ssh目录下生成一个私钥文件(默认为id_rsa)和一个公钥文件(默认为id_rsa.pub),如果.ssh目录不存在,则会自动创建该目录。生成RSA密钥对的命令:
ssh-keygen -t rsa -b 4096
该命令会生成一个4096位的RSA密钥对,并将私钥保存到~/.ssh/id_rsa文件中,将公钥保存到~/.ssh/id_rsa.pub文件中。
-t和-b是两个可选参数一般情况不用设置,具体含义如下:
-t rsa:指定要生成的密钥类型为RSA。-b 4096:指定要生成的密钥长度为4096位。
RSA呢是一种常用的公钥加密算法,4096位是RSA密钥对中的典型密钥长度,越长的密钥越难破解,但也会占用更多的存储空间和计算资源。
在执行该命令时,ssh-keygen会提示我们输入密钥文件的保存路径、密码等信息(一般我们可以不设置密码)。如果用户不输入任何信息,ssh-keygen将使用默认值生成密钥对,并将私钥保存到当前用户的.ssh目录下。
除了RSA密钥对,ssh-keygen命令还支持生成其他类型的密钥对,如DSA、ECDSA和Ed25519。例如,以下命令可以生成一个ECDSA密钥对:
ssh-keygen -t ecdsa -b 521
该命令会生成一个521位的ECDSA密钥对,并将私钥保存到~/.ssh/id_ecdsa文件中,将公钥保存到~/.ssh/id_ecdsa.pub文件中。
对了 如果你已经生成了同样算法的密钥,再次生成会被覆盖哦,除非你指定了不通的文件夹存放路径
.ssh目录文件内容介绍
Mac~/.ssh/
windowsC:/Users/userName/.ssh/
该文件夹下通常包括如下文件
配置文件
config这个文件包含了SSH客户端的配置信息。通过编辑config文件,我们可以指定默认的连接选项、主机别名等等。这些配置信息可以简化SSH连接的操作,例如:
HostName example.com
User myuser
IdentityFile ~/.ssh/id_rsa
这里指定了一个名为myserver的主机别名,每次连接该主机时,SSH客户端会自动使用~/.ssh/id_rsa文件进行验证,并且默认使用myuser作为登录用户名。这样我们只需要键入ssh myserver即可连接到远程服务器,而不需要每次都输入完整的连接参数。
- 私钥
id_rsa(Private Key 私钥)当用户连接远程服务器时,SSH客户端会使用私钥进行身份验证,私钥私钥就是私人的东西 只有自己知道,所以有保密性
- 公钥
id_rsa.pub(Public Key 公钥)公钥可以在远程服务器上保存,并用于验证客户端的身份,比如我们在使用ssh连接GitHub时,如果你未生成和配置密钥时无法连接的,需要我们将电脑上的公钥复制到GitHub中保存。
其他服务器也是一样可以使用例如,如果用户希望让服务器myserver允许其连接,那么可以将其公钥添加到myserver的authorized_keys文件中:
ncat ~/.ssh/id_rsa.pub | ssh myserver 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
这个命令就是将我们的公钥添加到myserver的authorized_keys文件中,从而允许该我们连接myserver。
-
known_hosts文件这个文件包含了已知的远程服务器主机公钥列表。当SSH客户端第一次连接一个新的服务器时,客户端会将服务器的公钥保存到
known_hosts文件中,以便将来连接时验证服务器的身份。例如,当用户第一次连接myserver时,客户端会提示用户是否要将服务器的公钥添加到known_hosts文件中,如下所示:
The authenticity of host 'example.com (192.168.0.1)' can't be established.ECDSA key fingerprint is 32:22:33:44:55:66:77:88:99:AA:BB:CC:
配置GitHub
当我们一切都准备就绪后就可以配置我们的GitHub了,首先用编辑器打开我们刚生成的公钥文件,将来的内容复制到GitHub中如下图 点击New SSH Key就可以添加了,你如果想要替换原来的删除重新添加就行,或者添加多个
添加设置后我们就可以测试一下是否可以通过ssh来连接GitHub了,输入一下命令
ssh -T git@github.com -T 是可选参数
如果你收到如下 就说明成功咯。
另外,如果你另外在一台(以Windows为例)没有私钥的电脑上再次克隆你的代码呢?会出现如下提示
当你输入yes 后依然是不行
此时你输入 ssh -T git@github.com 看到如下内容,说明你电脑私钥和GitHub上配置的公钥无法匹配所以是不行的。。。
此时需要将原有电脑中的私钥复制到该电脑中 C:\Users\UserName\.ssh中,并且创建 config文件 添加如下内容
Host github.com
HostName github.com
User git
此时再次输入 ssh -T git@github.com 看到
Hi ***! You've successfully authenticated, but GitHub does not provide shell access.
然后就可以愉快的coding了
Mac中操作类似
---- The end