Git系列之git ssh

ModelEngine·创作计划征文活动 10w+人浏览 1.3k人参与

 个人主页云纳星辰怀自在

座右铭:“所谓坚持,就是觉得还有希望!


Git SSH 完整配置与操作指南

1. SSH 基础概念与原理

1.1 SSH 协议概述

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。Git 使用 SSH 协议实现安全的远程仓库访问和代码传输。

1.2 Git SSH 工作流程

  • 身份验证:通过非对称加密技术验证用户身份
  • 数据传输:所有数据传输都经过加密,防止中间人攻击
  • 操作授权:基于密钥的访问控制,确保只有授权用户可以操作仓库

2. SSH 密钥生成与配置

2.1 生成 SSH 密钥对

# 生成 RSA 密钥对,-t 指定密钥类型,-b 指定密钥长度,-C 添加注释
ssh-keygen -t rsa -b 4096 -C "wangxiaoming@company.com"

# 执行过程详解:
# 1. 提示保存位置:直接回车使用默认路径 (/home/wangxiaoming/.ssh/id_rsa)
# 2. 设置密钥密码:输入强密码(建议8位以上包含大小写字母、数字和特殊字符)
# 3. 确认密码:再次输入相同密码

2.2 密钥文件说明

# 查看生成的密钥文件
ls -al ~/.ssh/

# 文件说明:
# id_rsa      - 私钥文件(必须严格保密,权限设置为600)
# id_rsa.pub  - 公钥文件(需要添加到GitLab服务器)
# known_hosts - 已知主机列表(自动记录连接过的主机密钥)

2.3 设置正确的文件权限

# 设置SSH目录权限(仅用户可读写执行)
chmod 700 ~/.ssh

# 设置私钥文件权限(仅用户可读写)
chmod 600 ~/.ssh/id_rsa

# 设置公钥文件权限(用户可读写,其他用户只读)
chmod 644 ~/.ssh/id_rsa.pub

# 设置已知主机文件权限
chmod 644 ~/.ssh/known_hosts

3. GitLab SSH 密钥配置

3.1 获取公钥内容

# 查看公钥内容
cat ~/.ssh/id_rsa.pub

# 输出示例:
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCw... wangxiaoming@company.com

3.2 GitLab 配置步骤

  1. 登录 GitLab:访问 http://175.15.61.142
  2. 进入个人设置:点击右上角头像 → Settings
  3. 导航到 SSH Keys:左侧菜单选择 SSH Keys
  4. 添加新密钥
    • •点击 "Add new key" 按钮
    • •在 Key 字段粘贴公钥内容
    • •在 Title 字段填写 "wangxiaoming's SSH Key"
    • •设置过期时间(可选)
    • •点击 "Add key" 完成添加

3.3 验证 SSH 配置

# 测试 SSH 连接到 GitLab 服务器
ssh -T git@175.15.61.142

# 成功响应示例:
# Welcome to GitLab, @wangxiaoming!

4. SSH 客户端配置优化

4.1 创建 SSH 配置文件

# 创建 SSH 配置目录(如果不存在)
mkdir -p ~/.ssh

# 编辑 SSH 配置文件
vim ~/.ssh/config

4.2 配置内容

# GitLab 服务器配置
Host 175.15.61.142
    HostName 175.15.61.142
    User git
    Port 22
    IdentityFile ~/.ssh/id_rsa
    PreferredAuthentications publickey
    # 连接超时设置(单位秒)
    ConnectTimeout 10
    # 保持连接心跳(防止超时断开)
    ServerAliveInterval 60
    ServerAliveCountMax 3
    # 压缩传输(加快大文件传输)
    Compression yes
    # 日志级别(调试时使用)
    # LogLevel DEBUG3

4.3 配置验证

# 测试配置是否正确
ssh -G git@175.15.61.142

# 检查特定主机的配置
ssh -G 175.15.61.142

5. Git 全局配置

5.1 设置用户信息

# 设置全局用户名(必须与 GitLab 账户一致)
git config --global user.name "wangxiaoming"

# 设置全局邮箱(必须与 GitLab 注册邮箱一致)
git config --global user.email "wangxiaoming@company.com"

# 设置默认文本编辑器
git config --global core.editor vim

# 设置默认分支名称
git config --global init.defaultBranch main

5.2 跨平台兼容性配置

# Windows 用户需要设置换行符转换
git config --global core.autocrlf true

# Linux/Mac 用户设置
git config --global core.autocrlf input

# 设置文件权限处理
git config --global core.filemode false

# 启用颜色显示
git config --global color.ui auto

5.3 验证配置

# 查看所有全局配置
git config --global --list

# 查看特定配置项
git config --global user.name
git config --global user.email

6. 仓库克隆与初始化

6.1 克隆指定分支的仓库

# 克隆 dev 分支的 hcu 仓库
git clone -b dev git@175.15.61.142:SwDev_BSW/pfm/hcu.git

# 进入仓库目录
cd hcu

# 查看远程仓库信息
git remote -v

# 查看当前分支状态
git status

# 查看分支列表
git branch -a

6.2 仓库初始化(新项目)

# 初始化新仓库
git init hcu-project
cd hcu-project

# 添加远程仓库地址
git remote add origin git@175.15.61.142:SwDev_BSW/pfm/hcu.git

# 拉取远程分支
git fetch origin

# 切换到开发分支
git checkout -b dev origin/dev

7. 日常开发工作流程

7.1 标准开发流程

# 1. 确保在开发分支
git checkout dev

# 2. 拉取最新代码(避免冲突)
git pull origin dev

# 3. 创建功能分支(基于最新开发分支)
git checkout -b feature/wangxiaoming-new-feature

# 4. 进行代码开发...
# (编辑文件、添加功能等)

# 5. 查看变更状态
git status

# 6. 添加修改文件到暂存区
git add .

# 7. 提交更改(使用规范的提交信息格式)
git commit -m "feat: 添加新功能模块

- 实现用户认证功能
- 添加数据库迁移脚本
- 更新API文档

由 wangxiaoming 开发"

# 8. 推送到远程仓库
git push -u origin feature/wangxiaoming-new-feature

7.2 提交信息规范

类型(范围): 简要描述

详细描述(可选)

- 变更点1
- 变更点2

关联issue: #123

常用类型说明:

  • feat: 新功能
  • fix: 修复bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构代码
  • test: 测试相关
  • chore: 构建过程或辅助工具变动

8. 分支管理与协作

8.1 分支操作命令

# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 查看所有分支(本地+远程)
git branch -a

# 创建新分支
git branch feature/wangxiaoming-branch

# 切换分支
git checkout feature/wangxiaoming-branch

# 创建并切换分支
git checkout -b feature/wangxiaoming-new

# 删除本地分支
git branch -d feature/old-branch

# 强制删除分支
git branch -D feature/old-branch

# 删除远程分支
git push origin --delete feature/old-branch

8.2 分支合并与变基

# 合并分支到当前分支
git merge feature/wangxiaoming-feature

# 变基操作(重写提交历史)
git rebase dev

# 交互式变基(合并、修改提交)
git rebase -i HEAD~3

9. 高级操作与故障排除

9.1 SSH 连接问题诊断

# 详细调试模式(显示完整连接过程)
ssh -vvv git@175.15.61.142

# 测试特定端口连接
ssh -p 22 -T git@175.15.61.142

# 检查网络连通性
ping 175.15.61.142

# 检查端口连通性
telnet 175.15.61.142 22

9.2 密钥管理问题

# 启动 SSH 代理
eval "$(ssh-agent -s)"

# 添加密钥到代理
ssh-add ~/.ssh/id_rsa

# 查看已加载的密钥
ssh-add -l

# 删除特定密钥
ssh-add -d ~/.ssh/id_rsa

# 清空所有密钥
ssh-add -D

9.3 Git 操作问题解决

# 重置本地修改(危险操作)
git reset --hard HEAD

# 清理未跟踪文件
git clean -fd

# 查看操作日志
git reflog

# 恢复误删的分支
git checkout -b recovered-branch <commit-hash>

10. 自动化脚本与工具

10.1 自动化部署脚本

#!/bin/bash
# deploy_hcu.sh - HCU项目自动化部署脚本

set -e  # 遇到错误立即退出

echo "=== HCU项目部署脚本 ==="
echo "执行用户: wangxiaoming"
echo "开始时间: $(date)"

# 变量定义
PROJECT_DIR="/home/wangxiaoming/projects/hcu"
BRANCH="dev"
REMOTE="origin"

# 进入项目目录
cd "$PROJECT_DIR" || { echo "项目目录不存在"; exit 1; }

# 检查Git状态
echo "1. 检查Git工作状态..."
if ! git status > /dev/null 2>&1; then
    echo "错误:不是有效的Git仓库"
    exit 1
fi

# 拉取最新代码
echo "2. 拉取最新代码..."
git fetch "$REMOTE"
git checkout "$BRANCH"
git pull "$REMOTE" "$BRANCH"

# 安装依赖(根据项目实际情况调整)
echo "3. 安装项目依赖..."
if [ -f "package.json" ]; then
    npm install
elif [ -f "requirements.txt" ]; then
    pip install -r requirements.txt
fi

# 运行测试
echo "4. 执行测试套件..."
if [ -f "pytest.ini" ]; then
    pytest
elif [ -f "jest.config.js" ]; then
    npm test
fi

# 构建项目
echo "5. 构建项目..."
if [ -f "build.gradle" ]; then
    ./gradlew build
elif [ -f "pom.xml" ]; then
    mvn package
fi

echo "=== 部署完成 ==="
echo "完成时间: $(date)"

10.2 日常开发辅助脚本

#!/bin/bash
# daily_dev.sh - 日常开发辅助脚本

# 切换到项目目录
cd /home/wangxiaoming/projects/hcu

# 更新代码库
echo "更新代码库..."
git fetch origin
git pull origin dev

# 创建每日开发分支
BRANCH_NAME="feature/wangxiaoming-$(date +%Y%m%d)"
echo "创建分支: $BRANCH_NAME"
git checkout -b "$BRANCH_NAME"

# 打开开发环境(根据实际环境调整)
# code .  # VS Code
# idea .  # IntelliJ IDEA

echo "开发环境准备就绪!"

11. 安全最佳实践

11.1 密钥安全管理

  • 定期更换密钥:建议每6-12个月更换一次SSH密钥
  • 使用强密码:为SSH密钥设置复杂的密码短语
  • 限制密钥使用范围:在GitLab中设置密钥的过期时间和访问范围

11.2 访问控制

# 检查当前用户的权限
groups
id wangxiaoming

# 查看仓库权限
git ls-remote --heads origin

11.3 审计与监控

# 查看操作历史
git log --oneline --graph --decorate --all

# 查看特定用户的提交
git log --author="wangxiaoming"

# 查看最近一周的提交
git log --since="1 week ago"

12. 性能优化建议

12.1 Git 配置优化

# 启用文件系统缓存(提高性能)
git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

# 大文件处理(如果项目中有大文件)
git config --global http.postBuffer 2097152000

12.2 SSH 连接优化

# 在SSH配置中添加以下优化参数
Host 175.15.61.142
    # 启用压缩(对于慢速网络)
    Compression yes
    # 连接复用(减少握手次数)
    ControlMaster auto
    ControlPath ~/.ssh/control:%h:%p:%r
    ControlPersist 600

通过以上完整的配置和操作指南,wangxiaoming 可以安全、高效地使用 SSH 协议进行 Git 仓库的日常开发工作。这套方案涵盖了从基础配置到高级优化的各个方面,确保开发流程的顺畅和安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云纳星辰怀自在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值