Git的免密操作
本篇内容需要结合Git建立本地裸仓库一起食用,最好能够跟着敲打,保证配置一致
每一次提交都需要敲打密码, 可以通过配置公钥解决这个问题
下面操作都是在发起连接的客户端实现
建立密钥 , 使用密码ssh-keygen
ssh-keygen -t rsa -C "ckk@mac.me" -f ~/.ssh/id_rsa
# -t: 默认rsa, 可以省略该选项
# -C: 添加注释文字, 该注释文字体现在公钥里头. 一般跟git的邮箱一致比较合适
# -f: 指定生成的名字, 默认是私钥: id_rsa 和 公钥: id_rsa.pub, 一般情况下默认就行, 否则需要注意配置.ssh/config文件
查看密钥
# Linux or Mac
cd ~/.ssh
# 查看公钥
cat id_rsa.pub
> ssh-rsa ... ckk@mac.me
# Windows
dir C:\Users\Ckk\.ssh
cd C:\Users\Ckk\.ssh
notepad id_rsa.pub
上传密钥
# ssh-copy-id -i key_file user@host
# -i : 指定公钥文件(xxx.pub), 可通过查看密钥步骤确认密钥路径
# user@host: 需要上传的路径, 在这里就是git裸仓库的url
# user 指用户名
# host 指ip地址
ssh-copy-id -i ~/.ssh/id_rsa_test.pub ckk@192.168.10.10
尝试无密码连接
git pull origin
# 输入命令不再提示输入密码
.ssh/config的作用
首先需要了解的是git push
时候会如何连接到仓库
git remote -v
# 查看远程仓库的url, 这里我们使用的是ssh的方式进行连接
# ssh的连接默认使用名字为"id_rsa"的私钥发起
# ssh -i ~/.ssh/id_rsa user@host
origin ckk@192.168.10.10:.test_pro.git (push)
origin ckk@192.168.10.10:.test_pro.git (fetch)
# 当使用 git push 时候, 就会进行ssh连接
# ssh -i ~/.ssh/id_ras ckk@192.168.10.10
下面解释一下常用的config
文件配置项
# Host : 是一个标记, 下面有例子说明这个位置的用途
# HostName : 表示一个可以访问的ip / 域名
# IdentityFile : 用于指定使用私钥文件
# User : 指定用户
Host server
HostName 192.168.10.10
IdentityFile ~/.ssh/test
User ckk
Host wsl
HostName 192.168.10.11
IdentityFile ~/.ssh/wsl
User ckk
# config 文件可以添加多项配置, 每一项配置都是以Host开头
下面做实验验证.ssh/config
文件的作用
# 添加配置项到~/.ssh/config
Host 192.168.10.10
HostName 192.168.10.10
# 保存好尝试进行连接
git pull
# 如果按照上面的方式生成密钥和配置配置, 此时不需要打密码
# 因为ssh连接默认使用id_rsa
# 多生成一份密钥进行测试
ssh-keygen -f ~/.ssh/test
# 添加IdentityFile配置项, 并将值设置为刚刚生成的密钥
Host 192.168.10.10
HostName 192.168.10.10
IdentityFile ~/.ssh/test
# 保存好尝试连接
git pull
# 此时需要输入密码, 这是因为使用的私钥与远程机器上面保存的公钥不是配对的
总结:
- ssh默认使用
~/.ssh/id_rsa
作为密钥 - config文件可以指定某个Host使用哪个密钥文件
- 如果私钥文件与远程机器上配置的公钥文件不一致, 那么还是需要输入密码
Host有什么妙用?
通常是用于区分机器的, 因为HostName已经表明了连接的地址, 那么Host就是用来标识远程机器的
# 添加新的远程分支
git remote add test ckk@test:~/.test_pro.git
# 查看新创建的分支
git remote -v
# 在.ssh/config添加新的Host
Host test
HostName 192.168.10.10
IdentityFile ~/.ssh/id_rsa
# 尝试使用test连接, 并且不需要输入密码
git pull test
# 删除远程分支
git remote rm test
从例子中可以得知, 创建远程分支时ssh url
中的Host
与config
文件的Host
是对应的。ssh连接时会匹配Host
找到配置项,读取配置并且发起连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义