当前位置: 首页 > 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.dtcms.com/a/315423.html

相关文章:

  • 计算机网络:目的网络在路由表项中的作用
  • Python实战项目--学生成绩管理系统
  • 机器人slam个人笔记
  • 交叉验证:机器学习模型评估的“稳压器”——从原理到实战
  • 测试开发:Python+Django实现接口测试工具
  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • 第六章 道阻且艰(2025.7学习总结)
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • 利用Coze平台生成测试用例
  • 发票的分类识别与查验接口-发票管理软件-发票查验API
  • C++返回值优化(RVO):高效返回对象的艺术
  • 《算法导论》第 2 章 - 算法基础
  • spring webflux链路跟踪【traceId日志自动打印】
  • 【Spring Boot 快速入门】七、阿里云 OSS 文件上传
  • 从零实现富文本编辑器#6-浏览器选区与编辑器选区模型同步
  • dos中常用的全屏幕编辑器
  • 一次“无告警”的服务器宕机分析:从无迹可寻到精准定位
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 前端性能工程化:构建高性能Web应用的系统化实践
  • 8.5 CSS3-flex弹性盒子
  • 从达梦到 StarRocks:国产数据库实时入仓实践
  • NFS CENTOS系统 安装配置
  • RAGFlow 0.20.0 : Multi-Agent Deep Research
  • Java Date类介绍
  • 计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
  • Python 基础语法(二):流程控制语句详解
  • FPGA实现Aurora 8B10B视频点对点传输,基于GTP高速收发器,提供4套工程源码和技术支持
  • [按键精灵]
  • 【C++详解】⼆叉搜索树原理剖析与模拟实现、key和key/value,内含优雅的赋值运算符重载写法