背景
在使用Git推送代码的时候,会默认需要输入密码。如果经常推送代码,那就需要经常输入密码,比较繁琐。所以Git也提供了免密登录的功能。
Git本身支持两种协议对远程Git仓库进行访问:HTTPS、SSH。两种方式有一定的区别,不过区别不是本博客的重点,就不过多介绍。本文重点介绍通过SSH协议对远程仓库进行访问时,如何配置免密登录。
配置免密
生成RSA密钥
打开cmd命令行,输入如下命令生成密钥:
ssh-keygen -t rsa -C "xxx" # -C后面的内容是注释,可以随便填写
第一使用该命令时,之后会在用户目录下生成.ssh
文件夹。其中会有一些文件,包括:id_rsa
、id_rsa.pub
以及其他的文件。id_rsa
是私钥,id_rsa.pub
是公钥。
将公钥内容上传到Git服务器
将公钥文件中的内容复制,并保存到服务器的~/.ssh/authorized_keys
文件中。
配置ssh
现在密钥有了,还需要在本机配置什么时候,用密钥进行免密登录。这里要用到~/.ssh
文件夹中的config
文件。需要注意,这个文件不是生成的,需要手动创建。创建好后,填写如下信息:
Host 服务器别名HostName 服务器主机名(IP)User 登录用户名IdentityFile ~/.ssh/id_rsa
其中
- Host服务器别名是指,在使用ssh协议进行通讯的时候,不需要写完整的IP,只需要写别名就可以,比较方便
- HostName就是服务器实际的IP
- User是登录的用户名
- IdentityFile是RSA私钥的路径
这里记录一个我遇到的坑。我之前在SSH的config文件中配置了一次服务器的相关信息。但是之后这个服务器突然搬到另外一个地方去了,IP变了,端口也变了。我之后再使用Git进行推送的时候,因为太久没配置ssh了,忘记了有config这个文件,以为把Git的IP改了就行了。结果死活推送不上去。之后才发现要改SSH的config文件吗,把端口去掉才行。
另外,SSH密钥是全局的,并不局限于在Git中使用。只要计算机通讯用到了SSH协议,都可以使用这个密钥进行免密登录,比如:
- SSH命令,远程登录到另外一台机器
- SCP命令,在本机和远程机器之间传输文件
- Git相关的命令,比如git clone、git push等