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中的Hostconfig文件的Host是对应的。ssh连接时会匹配Host找到配置项,读取配置并且发起连接。

posted @   winkie  阅读(695)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示