当前位置: 首页 > news >正文

【Git】实现使用SSH方式连接远程仓库时的免密操作

SSH与HTTP(S)远程连接的优势对比:

SSH协议:

安全性高。使用非对称加密技术。通过公钥和私钥进行认证,数据传输加密。

认证方式是基于密钥的,将公钥上传至远程仓库,使用本地私钥进行连接,一次配置终身使用,无需反复输入密码。

免密操作容易实现,通过ssh-agent,可设置为一次输入密码就即可在多个会话中保持免密状态。

可能会受限于防火墙,SSH默认使用是22端口,该端口可能被禁用。

初次配置相较于HTTP是比较复杂的。

HTTP(S)协议:

安全性较低。使用用户名和密码进行认证,如果密码泄露或被截获,安全性会受到威胁。

认证方式是基于密码和令牌的,每次操作都需要输入用户名和密码,或者使用个人访问令牌(PAT),相对繁琐。

免密操作的实现需要用Git Credential Manager来缓存密码,存在安全风险。

通常不受到防火墙限制,使用的是443端口,这是所有网页的通用端口,通常不会被防火墙阻止。

只需要知道用户名和密码就可以开始使用,无需额外的操作。

使用SSH连接远程仓库并实现免密操作的步骤:

1.生成密钥对

# 在Git Bash下运行以下命令,注:将your_email@example.com替换为你的邮箱
ssh-keygen -t ed25519 -C "your_email@example.com"
# -t ed25519 指定了加密算法,ed25519 比传统的 rsa 更安全、更快。
# -C 选项为你的密钥添加一个注释。# 接着命令行会提示输入密码# 生成后,会在~/.ssh/目录下看到两个文件:
# id_xxxxxx(这是私钥,放置在本地,不要泄露,就像钥匙)
# id_xxxxxx.pub(这是公钥,放置在远程仓库,就像锁)

2.配置远程仓库

# 将公钥放入Github后保存

3.配置本地环境以实现免密

# 使用ssh-agent缓存私钥密码
# 在~/.目录下新建一个文件取名为.bash_profile
# 编辑该文件如下
# 文件: ~/.bashrc# 这是一个用于管理 ssh-agent 生命周期的脚本,
# 确保在 Git Bash 中只需输入一次密码。# 存储 ssh-agent 环境变量的文件路径
SSH_ENV="$HOME/.ssh/agent.env"# --- 启动一个新的 ssh-agent 进程 ---
function start_agent() {echo "Starting a new ssh-agent..."# 'umask 077' 确保文件只有当前用户可读写(umask 077; ssh-agent >| "$SSH_ENV")echo "Agent started. Please enter your SSH key passphrase."# 加载新的环境变量. "$SSH_ENV" > /dev/nullssh-add
}# --- 加载现有 ssh-agent 的环境变量 ---
function load_agent_env() {if [ -f "$SSH_ENV" ]; then. "$SSH_ENV" > /dev/nullfi
}# --- 主要逻辑 ---
# 首先,尝试加载已有的 agent 环境变量
load_agent_env# 检查 SSH_AUTH_SOCK 是否已设置,并判断 agent 是否仍在运行
# 'ssh-add -l' 返回的退出码:
#   0: agent 运行且有密钥
#   1: agent 运行但无密钥
#   2: agent 未运行
agent_status=$(ssh-add -l > /dev/null 2>&1; echo $?)if [ ! -n "$SSH_AUTH_SOCK" ] || [ "$agent_status" = "2" ]; then# agent 未运行,启动新进程start_agent
elif [ "$agent_status" = "1" ]; then# agent 运行但无密钥,添加密钥echo "Agent is running but has no keys. Adding keys..."ssh-add
else# agent 运行且有密钥,一切正常echo "Agent is running with keys. All set."
fi# 清理辅助变量
unset SSH_ENV
# 编辑后保存

4.测试免密操作

# 打开一个git bash窗口,初次输入密码后
# 密码会被ssh-agent代理
# 之后打开其他窗口将不用进行密码输入
http://www.lryc.cn/news/611416.html

相关文章:

  • 17.8 ChatGLM3/CogVLM一键部署指南:32K长文本+多模态实战,零基础搞定企业级模型微调(附完整代码)
  • 机器学习算法系列专栏:决策树算法(初学者)
  • systemui 的启动流程是怎么样的?
  • VUE2 学习笔记 合集
  • 系统设计入门:成为更优秀的工程师
  • (ZipList入门笔记一)ZipList的节点介绍
  • 【面试场景题】日志去重与统计系统设计
  • 【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)
  • 浮雕软件Artcam安装包百度云网盘下载与安装指南
  • 内部排序算法总结(考研向)
  • [验证回文串]
  • C#案例实战
  • LeetCode——2411. 按位或最大的最小子数组长度
  • MCP与Function Calling
  • MySQL间隙锁在查询时锁定的范围
  • MinIO02-Docker安装
  • AI编程新时代:从氛围编程到上下文编程的深度实践和思考
  • GPS信号捕获尝试(上)
  • 快接龙 | 要如何对用户的接龙频次进行系统硬控
  • MongoDB 从3.4.0升级到4.0.0完整指南实战-优雅草蜻蜓I即时通讯水银版成功升级-卓伊凡|bigniu
  • 【文本左右对齐】
  • 【web自动化测试】实战
  • Python基础框架
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 前端包管理器深度对比
  • 普通树状数组
  • 贪心算法学习 1
  • Zabbix 企业级高级应用
  • 风丘助力混合动力汽车工况测试:精准采集整车信号解决方案
  • VNC连接VirtualBox中的Ubuntu24.04 desktop图形化(GUI)界面