git 作为当前最受欢迎的版本控制软件,使用是很频繁的…
但是有的小伙伴发现每次使用 git push 等操作时都要输入密码,实在是麻烦。这里对使用 SSH 与 HTTPS 两种通讯协议介绍一下免密码配置
一、本地Git
基本信息配置
本地
Git
用户名、邮箱等基本信息配置
i. 查看
验证『当前本地』是否已配置账号信息
$ git config --list # 查看所有
$ git config --global --list # 查看当前用户(global)配置
$ git config --system --list # 查看系统config
$ git config --local --list # 查看当前仓库配置信息
# 查看指定信息
$ git config user.name
$ git config user.email
ii. 增删改
第一次配置,需要设置Git
的user name
和email
# 新增或覆盖
$ git config --global user.name "lian" # you name
$ git config --global user.email "lian@foxmail.com" # you email
# 替换
$ git config --global --replace-all user.name "yourName"
$ git config --global --replace-all user.email "your@email.com"
# 删除
$ git config --global --unset user.name "yourName"
$ git config --global --unset user.email "your@email.com"
二、ssh key
和https
差异
clone
项目: 使用ssh
方式时,首先你必须是该项目的管理者或拥有者,并且需要配置个人的ssh key
。而对于使用https
方式来讲,就没有这些要求。push
:在使用ssh
方式时,是不需要验证用户名和密码,如果你在配置ssh key
时设置了密码,则需要验证密码。而对于使用https
方式来讲,每次push
都需要验证用户名和密码。
三、配置ssh key
1. 单个ssh key
生成及配置
1.1 生成密钥
ssh-keygen
程序在Linux/Mac
系统上由SSH
包提供,而在Windows
上则包含在MSysGit
包里
$ ssh-keygen -t rsa -C "lian@foxmail.com"
直接Enter
,会提示你输入密码,如下(可不输,建议输入,安全性更高):
Enter same passphrase again: [Type passphrase again]
『本地的密钥对』生成完成提示:
Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db lian@foxmail.com
得到两个文件:id_rsa
和id_rsa.pub
。不是第一次,则选择overwrite
1.2 检查是否存在ssh key
$ cd ~/.ssh
$ cd ~/.ssh && ls # 进入且查看
id_rsa
:密钥id_rsa.pub
:有.pub
后缀的文件就是公钥,另一个文件则是。
1.3 添加公钥到远程仓库(github、gitLab 等)
查看公钥
$ cat ~/.ssh/id_rsa.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAAAQC0X6L1zLL4VHuvGb8aJH3ippTozmReSUzgntvk434aJ
...
6J0GFlBVQeTE/IGqhMS5PMln3 lian@foxmail.com
添加公钥到远程仓库
以gitHub
为例,登录进入个人中心,打开Settings -> SSH Keys
,复制公钥内容到『key
文本域』内
如果公钥复制正确, 『
title
域』会自动将you email
代入, 便于标识,你可以修改为其他的名字
用ssh命令
分别测试
ssh -T git@github.com
2. 多个SSH-Key
配置
当有多个『
git
账号』时,比如:一个gitLab
,用于公司内的工作开发。一个github
,用于个人的一些开发方向。
2.1 生成ssh key
# 生成一个gitlab用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/id_rsa_gitlab
# 生成一个github用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/id_rsa_github
2.2 生成config
配置文件
~/.ssh
目录下新建一个config
文件
$ cd ~/.ssh
# 为.ssh目录设置权限
.ssh $ chmod 600 ~/.ssh/config
config
文件,添加如下内容:
Host
和HostName
填写git
服务器的域名IdentityFile
指定私钥的路径
# gitLab
Host gitLab.com
HostName gitLab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
2.3 用ssh
命令分别测试
$ ssh -T git@gitLab.com
$ ssh -T git@github.com
以gitHub
为例,成功返回如下内容:
$ ssh -T git@github.com
Hi lianpf! You've successfully authenticated, but GitHub does not provide shell access.
四、HTTPS 通信协议
待更新…g
常见问题
1.Git SSH 连接失败?
背景:
git pull
或git push
时,终端突然报错,提示无法连接到远程仓库?你需要从网络和配置,两个方向去解决问题。
第1步:排查错误类型
针对代理问题(错误类型1): Connection closed by 127.0.0.1 port 7890
- 核心问题: SSH 流量被本地的代理软件拦截
- 分析:
127.0.0.1
是本地地址,7890
是常见代理端口,表明请求被本地代理程序重定向并关闭 - 解决思路:
- 关闭 VPN 或代理工具
- 重新尝试 Git 命令
- 如果成功则问题解决;如果仍然超时,按下面方法处理
针对超时问题(错误类型2): Operation timed out
- 核心问题: SSH 流量被网络防火墙静默拦截
- 分析: 连接请求发出后无响应,通常是网络阻止了 22 端口(SSH 默认端口)的流量
- 解决思路
- 排查网络环境: 尝试切换网络(如手机热点)来确认是否为网络防火墙问题
- 切换 SSH 端口: 如果确认是防火墙问题,修改 SSH 配置使用 443 端口
第3步:配置 SSH 使用 443 端口
GitHub 支持在 443 端口进行 SSH 连接,该端口通常不会被防火墙拦截:
- 创建或编辑 SSH 配置文件:
~/.ssh/config
- 添加以下内容:
Host github.com HostName ssh.github.com User git Port 443
- 保存文件后重新运行 Git 命令
处理首次连接的安全警告: 首次连接新地址时会出现安全确认提示:
The authenticity of host 'xxx' can't be established.
[XXX] key fingerprint is [XXX].
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:xx: github.com
Are you sure you want to continue connecting (yes/no/[fingerprint])?
这是正常的安全机制,完整输入 yes
并回车即可。系统会将 GitHub 的公钥指纹保存到 ~/.ssh/known_hosts
文件中,之后不会再提示。
最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~
